我在JS中学习词汇范围和执行上下文并遇到了一个问题。
我对关键字this
的理解可能有限,但我发现它引用了任何函数的当前执行上下文中的所有变量。
考虑这个例子:
function b(){
console.log(this);
}
var myVar = 1;
b();
在这里,我将获得一个控制台日志到myVar,它将被分配给值1.
现在举个例子:
function a(){
function b(){
console.log(this);
}
var myVar = 2;
b();
}
var myVar = 100;
a();
当调用函数b时,我看到对myVar的引用,该引用被赋值为100.为什么没有对myVar的引用被分配给2?
没有'这个'参考当前功能的词汇环境?在这种情况下,函数b包含在函数a而不是全局环境中。
答案 0 :(得分:4)
您对this
的理解是完全错误的。
this
的值(通常)取决于函数的调用方式。 (有关详细信息,请参阅How does the “this” keyword work?。)
如果你是:
...然后this
将是window
对象。
通常,当声明变量时,它仅存在于声明它的范围内。它不是任何物体的财产。
有一个例外:
当变量在全局范围内声明时(即在任何函数之外或在函数内没有let
或var
),它也会成为window
对象的属性。
你看到的效果是这两件事的结合。
b();
没有上下文,因此this
为window
。 var myVar = 100;
不在任何函数之内,因此是window
的全局属性。