【发布时间】:2017-06-15 18:40:05
【问题描述】:
我很难理解这个问题。 我知道范围链、javascript 中的回调、回调中 this 的值以及箭头函数。
在 javascript 中,闭包可以通过作用域链访问封闭函数的变量。那么为什么闭包不访问通过 Function.prototype.bind 绑定到闭包的父函数的“this”呢?变量“this”不是作用域链的一部分吗?
在 chrome 控制台中运行以下代码:
a = 4;
b = 6;
function outer(){
function inner(){
console.log(`this.a is ${this.a} and this.b is ${this.b}`);
}
inner();
}
outer.bind({a:1,b:3})()
控制台又退回来了:
this.a is 4 and this.b is 6
【问题讨论】:
-
那是因为你有全局变量!
this里面的inner仍然是window访问全局变量。 -
@AndrewLi 好的,我明白了,内部不应该访问外部的边界 a 和 b,因为它是一个闭包?
-
不,因为您在闭包中访问
this。与外部函数无关。 -
所以你的意思是说'this'与范围链无关?
-
@AndrewLi ,好吧,你的意思是说,当我定义这个函数时,这是在函数范围内通过引擎内部分配的?
标签: javascript ecmascript-6 ecmascript-5