Chrome中的ES6 - Babel源地图和箭头函数的词法范围
ES6 in Chrome - Babel Sourcemaps and Arrow Functions lexical scope
我在ES6 class
中有一个函数:
class Test {
// Omitted code for brevity
loadEvents() {
$.get('/api/v1/events', (data) => {
this.actions.setEvents(data);
});
}
}
Babel将其转换为另一种形式,并生成一个_this
变量来控制箭头函数的词法作用域。
var _this = this;
$.get('/api/v1/events', function (data) {
_this.actions.setEvents(data);
});
当我在Chrome中使用sourcemaps调试ES6类并在我调用this.actions.setEvents(data);
的行上放置一个断点时,我注意到Chrome没有"重新映射"this
以匹配原始的ES6代码,而是this
指向外部函数范围,如果我想访问箭头函数词法范围,我需要使用_this
,这是完全没有意义的。如果我使用源地图,我希望Chrome开发工具保留this
的词法范围,就像我的ES6代码一样。
是否有一种方法,使Chrome开发人员的工具工作与预期的源地图和箭头功能?
嗯,
-
Chromium目前不使用
names
的映射。https://code.google.com/p/chromium/issues/detail?id=327092 -
this
是一个特殊的绑定,所以它的编译方式是不可能这样做的。我唯一能想到的是这样翻译它,但我不知道它是否可行:$.get('/api/v1/events', function (data) { this.actions.setEvents(data); }.bind(this));
看看Babel箭头函数转换器,它似乎已经实现了bind(this)解决方案,这使得调试器显示正确的this。
我在我的chrome开发工具中测试了它
相关文章:
- 可以't访问JavaScript函数范围中的变量
- javascript onload函数范围查询
- JavaScript新函数范围ReferenceError
- JavaScript中的函数范围
- javascript中的函数范围错误
- 挖空 - 单击绑定到对象函数 - 范围问题
- 创建可在任何地方使用的 JS 函数?范围和功能“未定义”的问题
- JavaScript 函数范围
- 访问函数范围之外的变量时出现问题
- 函数范围规则(Google Apps 脚本项目)
- JavaScript 事件处理程序函数范围控件
- j查询函数范围混淆
- 带有 jQuery 函数范围的 Angular 2
- 在 JavaScript 中,未声明的变量赋值可以在函数范围之外访问
- 类型错误:在对象 [对象对象] 中找不到函数范围到对象.(第 4 行,文件“代码”)
- 从全局定义的函数访问函数范围链
- 为什么当“var”在函数范围内时,它的值不发生变化
- ExtJs6.0-Ext.application内部的Javascript事件处理程序函数范围
- JavaScript函数范围行为
- javascript中的函数范围