以下示例工作正常,内部范围内提供词法范围。
var fn =function(){
this.no = 0;
this.addNo = () => {
setTimeout( ()=> {
// ES6 lexical scope is available
this.no =++this.no;
console.log(this.no);
}, 2000);
}
}
var f1 = new fn();
f1.addNo();
f1.addNo();
以下示例不起作用。
var fn =() =>{
this.no = 0;
this.addNo = () => {
setTimeout( ()=> {
// ES6 lexical scope is not available
this.no =++this.no;
console.log(this.no);
}, 2000);
}
}
var f1 = new fn();
f1.addNo();
f1.addNo();
错误
" TypeError:无法设置属性' no'未定义的
答案 0 :(得分:0)
es5翻译添加这样的功能:
"use strict";
var fn = function fn(){
undefined.no = 0;
undefined.addNo = function () {
setTimeout(function () {
// ES6 lexical scope is not available
undefined.no = ++undefined.no;
console.log(undefined.no);
}, 2000);
};
}; 和es6翻译代码,这样你就可以看到不同的代码。
var _this = this;
var fn =()=> {
_this.no = 0;
_this.addNo = () => {
setTimeout(() => {
// ES6 lexical scope is not available
_this.no = ++_this.no;
console.log(_this.no);
}, 2000);
};
};
因为函数没有默认作用域,所以在es5中这是未定义的。在es6编译器中使用它在函数绑定到顶部作用域。