最后我真的试图理解词汇范围,我编写了这段代码。
在normalFunction中,其作用域是其内部,第一个this.a是提升后的aaa?
在anonymousFunction中,它的作用域是词法,即从中创建函数的范围(全局/窗口对象)。如果未声明this.z,那么第一个this.z控制台日志将是未定义的,因为这里没有吊装?
this.a = 'outer';
this.z = 'outer';
function normalFunction() {
console.log('first: ', this.a); // first: aaa
return function y() {
this.a = 'aa';
console.log(this.a); // aa
return function z() {
this.a = 'aaa';
console.log(this.a); // aaa
}
}
}
const anonymousFunction = () => {
console.log('first: ', this.z); // first: outer
return () => {
this.z = 'zz';
console.log(this.z); // zz
return () => {
this.z = 'zzz';
console.log(this.z); // zzz
}
}
}
normalFunction(1)(2)(3);
anonymousFunction(1)(2)(3);