我正在学习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。为什么没有赋值为2的对myVar的引用?
'this‘不是指当前函数的词法环境吗?在这种情况下,函数b包含在函数a中,而不是全局环境中。
发布于 2016-09-29 00:26:27
您对this的理解是完全错误的。
this的值(通常)取决于函数的调用方式。(详细信息请参见How does the “this” keyword work? )。
如果你是:
…然后,this将成为window对象。
通常,声明变量时,它只存在于声明时所在的作用域中。它不是任何对象的属性。
有一个例外:
当一个变量在全局作用域中声明时(即在任何函数外部或函数内部没有let或var ),它也将成为window对象的属性。
你所看到的效果就是这两件事的结合。
b();没有上下文,所以this是window。var myVar = 100;位于任何函数之外,全局函数也是如此,因此是window的一个属性。
https://stackoverflow.com/questions/39752843
复制相似问题