函数仍然可以访问局部变量?

时间:2013-12-08 12:02:17

标签: javascript variables scope

function x() {
    if(true) {
         var y = "hello world";
    }
    alert(y);
}
x()
alert(y)

当我运行此代码时,它会提醒两次“Hello world”。

我阅读了有关范围的教程,第二次警报无法访问y

为什么可以访问?在此先感谢!!

2 个答案:

答案 0 :(得分:3)

不,它没有提醒两次。 (我实际上在IE,Firefox和Chrome中对此进行了测试,绝对确定。)

该变量是函数的本地变量,因此尝试在函数外部使用它会导致引用错误。


如果您确实看到了这种行为,那么这是因为您已经在全局范围内使用相同的名称定义了一个具有相同值的变量。

答案 1 :(得分:0)

变量y不应在函数外部访问。当我测试它时,它无法访问。

你可能实际上已经在全局范围内的某处定义了变量y,这可能是被警告的内容。

JavaScript中的局部变量只能被本地范围访问,而全局变量(在函数之外定义的变量)可以随处访问,甚至可以在函数内部访问。

在您的情况下,我怀疑可能在全局范围内的某处定义了另一个“y”变量。


你还确定你没有两次运行你的脚本吗?在这种情况下,您可能会通过两次调用x()函数来获取警报两次。

另一个原因是您的页面上可能还有另一个脚本,该脚本在其全局范围内定义了y变量,当它与此脚本结合使用时,它会警告在另一个脚本的全局范围内定义的y变量