首页 > 解决方案 > 理解“this”绑定

问题描述

我正在阅读“Eloquent Javascript”一书,并且正在阅读“对象的秘密生活”一章。作者说:

“由于每个函数都有自己的绑定,其值取决于调用它的方式,因此您不能在使用关键字this定义的常规函数​​中引用包装范围。function

我不明白他所说的“包装范围”是什么意思,你能解释一下并提供一个简单的例子吗?

标签: javascriptthis

解决方案


函数的包装范围将是定义函数的范围。例如

function outer() {
    var outerThis = this;
    return function inner() {
        console.log(outerThis, this);
    }
}

在这里,inner函数具有包装范围 = 范围outer。而且,内部函数无法访问外部函数,这就是为什么如果我们想使用它,this我们需要将它存储在一个变量中。outerThis

var innerFunction = outer.call({});
innerFunction();

如果您在 chrome 控制台上执行上述操作,这将打印:

{},        // Caller of outer() (it was bound)
Window     // Caller of inner()

推荐阅读