2014-12-05 89 views
-1

我正在学习JavaScript,根本没有编程背景。在这个例子中,我想我明白foo是一个未声明的(全局)变量,当bar被计算时,它是不存在的,所以bar =(undefined + 1)或者NaN。测试代码中是否定义了未声明的变量是否合理?

var bar = foo + 1, 
    foo = 1; 

比方说,这是一个很长的一堆代码的结束。如果foo先前已被定义并且foo = 1会如何重新设置foo的值呢?测试它有意义吗?我想我打开一个蠕虫的范围....(“范围?你不能haaaandle范围!”)

我非常感谢你的耐心等待我的学习曲线!任何答案,你可以在短语或类似的比喻,将有助于我取得此我带....

+0

这可能只是我,但我不明白你问:是你能改一下你的问题吗? – Deleteman 2014-12-05 18:42:53

+0

这是更可能*主观的概念问题。*话虽这么说,我是周围的*这是好的一个节目打破事实上的工作组程序员的一部分。*如果'foo'是永远打算是未定义的,检查它是否是NaN是多余的,因为当它是NaN时,程序流失败。 – Compass 2014-12-05 18:43:44

+0

我也不明白。 “?*如果有富了先前定义和富= 1旨在重新foo的值是否有意义,以测试它*?” - 你想重置'foo'的价值?如果是这样,那就做吧。如果你不这样做,不要这样做。恐怕我无法看清你问题的核心。这似乎与'bar'与'foo'的关系有关,但我不确定。 – apsillers 2014-12-05 18:45:23

回答

0

可以测试和使用OR运算符尚未宣布声明||

foo = foo || 1; 

所以如果foo存在,foo将是foo。如果富不存在,foo将是1

+1

小心,因为如果foo == 0 foo将被设置为1,即使foo声明并且有一个值。 – Deleteman 2014-12-05 18:46:11

+0

很棒。我实际上只用过这个对象,而不是可能遭受类型转换的基元。 – wwwmarty 2014-12-05 18:49:45

0

不一定,虽然这取决于上下文。你正在声明新的变量。所以,你是对的,如果foo不在范围存在,bar将为NaN。但是,如果代码在本地范围内运行,foo将不会覆盖全局foo。

下段显示了这一点:bar为NaN两个时代,但当地foo是可以获得价值2,不会改变全球foo,保持价值1的价值。

var bar = foo + 1, 
 
    foo = 1; 
 

 
document.write('global bar = ' + bar + '<br>'); 
 
document.write('global foo = ' + foo + '<br>'); 
 

 

 
(function() { 
 
    var bar = foo + 1, 
 
     foo = 2; 
 

 
    document.write('local bar = ' + bar + '<br>'); 
 
    document.write('local foo = ' + foo + '<br>'); 
 
    
 
}()); 
 

 
document.write('global foo = ' + foo + '<br>');

输出:

全球巴= NaN的
全球富= 1
本地巴= NaN的
本地富= 2
全球富= 1