2014-09-12 74 views
0

我有两个函数的例子如下在覆盖了功能未申报的JavaScript变量使用

function call1() { 
    variable = "test string"; 
} 

function call2() { 
    variable = responseFromAJAX(); 

    document.title = variable; 

    setTimeout(function() { call2(o); }, 1000); 
} 

如果有反正未申报的变量“变量”可以通过函数重载?即使“变量”没有被声明在函数的范围之外?

非常感谢

+0

的'var'关键字是你的朋友。 – Pointy 2014-09-12 12:55:55

+2

确实。你应该总是使用'var'来定义变量并避免全局声明,因为它们可以创建真正烦人的'小'错误... – 2014-09-12 13:00:34

回答

4

如果有反正未申报的变量“变量”可以通过函数重载?

是的。除非您处于严格模式,否则分配给未声明的变量会隐式创建一个全局变量(我称之为The Horror of Implicit Globals)。所以任何一个函数都可以写入它。幸运的是,严格模式阻止了隐式全局变量。

+1

该链接是一篇很好的文章,清楚地解释'globals'..谢谢。 – sri 2014-09-12 14:31:13

3

是的,如果你没有声明它是一个类型var它将被视为一个全局变量。 这与声明全局变量相同。

那么它将作为

function call1() { 
     variable = "test string"; 
    } // If you call this method variable will have the value as "test String" 

function call2() { 
    variable = responseFromAJAX(); 

    document.title = variable; 

    setTimeout(function() { call2(o); }, 1000); 
} // If you call this method variable will have the value will be the value from AJAX