Javascript 为什么可以';当引用外部环境时,我是否可以访问此特定变量?
我正在学习JS中的词汇范围和执行上下文,遇到了一个问题 我对关键字Javascript 为什么可以';当引用外部环境时,我是否可以访问此特定变量?,javascript,this,lexical,Javascript,This,Lexical,我正在学习JS中的词汇范围和执行上下文,遇到了一个问题 我对关键字this的理解可能有限,但我发现它引用了任何函数当前执行上下文中的所有变量 考虑这个例子: function b(){ console.log(this); } var myVar = 1; b(); function a(){ function b(){ console.log(this); } var myVar = 2; b(); } var myVar = 100; a(); 在这里,
this
的理解可能有限,但我发现它引用了任何函数当前执行上下文中的所有变量
考虑这个例子:
function b(){
console.log(this);
}
var myVar = 1;
b();
function a(){
function b(){
console.log(this);
}
var myVar = 2;
b();
}
var myVar = 100;
a();
在这里,我将获得一个myVar的控制台日志,该日志将被分配给值1
现在来看这个例子:
function b(){
console.log(this);
}
var myVar = 1;
b();
function a(){
function b(){
console.log(this);
}
var myVar = 2;
b();
}
var myVar = 100;
a();
调用函数b时,我看到一个对myVar的引用,它被分配到100。为什么没有指定给2的myVar引用
“this”不是指当前函数的词法环境吗?在这种情况下,函数b包含在函数a中,而不是全局环境中 你对
的理解是完全错误的
此
的值取决于(通常)调用函数的方式。(详情请参见)
如果你是:
- 在浏览器中
- 你的JS没有运行(应该是这样)
- 调用函数时没有显式上下文
…然后此
将成为窗口
对象
通常,当声明变量时,它只存在于声明它的范围内。它不是任何对象的属性
有一个例外:
当在全局范围内声明变量时(即,在任何函数之外或函数内部没有let
或var
),它也成为窗口
对象的属性
你看到的效果是这两件事的结合
b()代码>没有上下文,因此此
是窗口
<代码>var myVar=100
不属于任何函数,因此是全局的,因此是窗口的属性
您对的理解是完全错误的
此
的值取决于(通常)调用函数的方式。(详情请参见)
如果你是:
- 在浏览器中
- 你的JS没有运行(应该是这样)
- 调用函数时没有显式上下文
…然后此
将成为窗口
对象
通常,当声明变量时,它只存在于声明它的范围内。它不是任何对象的属性
有一个例外:
当在全局范围内声明变量时(即,在任何函数之外或函数内部没有let
或var
),它也成为窗口
对象的属性
你看到的效果是这两件事的结合
b()代码>没有上下文,因此此
是窗口
<代码>var myVar=100
在任何函数之外,因此是全局的,因此是窗口的属性
不是在函数a的上下文下吗?因此,函数b在函数a中作为对其外部环境的引用?@user3882106-No。正如我所说,上下文由函数的调用方式决定,而不是由函数的声明位置决定。看见不要混淆上下文和范围。b不是在函数a的上下文下吗?因此,函数b在函数a中作为对其外部环境的引用?@user3882106-No。正如我所说,上下文由函数的调用方式决定,而不是由函数的声明位置决定。看见不要混淆上下文和范围。