Javascript为什么我可以访问函数的局部变量

时间:2017-12-27 18:28:22

标签: javascript function local-variables

我正在Google Chrome上对此进行测试:

function test(){
    d = 2;
}
function test2(){
    test();
    document.write(d);
}
test2();

函数test中的变量d应该是本地的,所以我无法在函数test2中访问它,有人可以解释为什么这有效吗?

编辑:

这不重复,因为我在原始问题的正确答案中找不到任何地方使用不带var的变量使其成为全局变量,它被隐含地称为“隐式全局变量的恐怖”

3 个答案:

答案 0 :(得分:5)

您实际上从未声明过该变量,因此它不是局部变量。相反,它是一个隐含的全球性。

您应始终使用'use strict';来表示错误。

答案 1 :(得分:1)

此变量从未声明过,它将自动声明为:

window.d = 2;

答案 2 :(得分:1)

当您编写d = 2时,您告诉JavaScript编译器将值2分配给变量d。函数测试将在其局部范围内找到是否定义了变量d,并且由于尚未在那里声明它将失败。因此,测试函数将询问它的父范围,如果它已声明变量但父范围也未声明变量d。然后测试函数的父作用域将询问全局作用域是否已声明d并且全局作用域发现没有任何变量d因此它将创建名为d的变量并返回该变量。由于变量d由编译器全局声明,因此您可以在test2中访问它。