Javascript 测试未声明的变量是否在代码的前面定义有意义吗?
我正在学习JavaScript,没有任何编程背景。在本例中,我认为我理解foo是一个未声明的(全局)变量,在计算bar时它不存在,因此bar=(未定义+1)或NaNJavascript 测试未声明的变量是否在代码的前面定义有意义吗?,javascript,variables,Javascript,Variables,我正在学习JavaScript,没有任何编程背景。在本例中,我认为我理解foo是一个未声明的(全局)变量,在计算bar时它不存在,因此bar=(未定义+1)或NaN var bar = foo + 1, foo = 1; 假设这是一长串代码的结尾。如果之前定义了foo,并且foo=1旨在重新设置foo的值,该怎么办?测试它有意义吗?我想我正在打开一个蠕虫的范围。。。。(“范围?你不能处理范围!”) 我提前感谢大家对我的学习曲线的耐心!任何你可以用类比或隐喻表达的答案都有助于我理解这一点
var bar = foo + 1,
foo = 1;
假设这是一长串代码的结尾。如果之前定义了foo,并且foo=1旨在重新设置foo的值,该怎么办?测试它有意义吗?我想我正在打开一个蠕虫的范围。。。。(“范围?你不能处理范围!”)
我提前感谢大家对我的学习曲线的耐心!任何你可以用类比或隐喻表达的答案都有助于我理解这一点。你可以使用or运算符测试和声明尚未声明的内容||
foo = foo || 1;
所以如果foo存在,foo就是foo。如果foo不存在,foo将是1。不一定,尽管它取决于上下文。您正在声明新变量。因此,您是对的,如果范围中不存在
foo
,bar
将为NaN。但是,如果此代码在本地范围内运行,则foo不会覆盖全局foo
下面的代码片段显示:bar
两次都是NaN,但是获取值2
的本地foo
不会更改保留值1
的全局foo
的值
var bar=foo+1,
foo=1;
document.write('global bar='+bar+'
');
document.write('global foo='+foo+'
');
(功能(){
var bar=foo+1,
foo=2;
document.write('localbar='+bar+'
');
document.write('localfoo='+foo+'
');
}());
document.write('global foo='+foo+'
')代码>可能只是我,但我不明白你在问什么:你能重新表述你的问题吗?这更像是一个概念性的问题,可能是主观的。也就是说,我是一群程序员中的一员,他们围绕着这样一个事实进行操作:程序崩溃是可以的。如果foo
从来都不是未定义的,那么检查它是否为NaN是多余的,因为当它为NaN时程序流失败。我也不明白。“如果之前定义了foo,并且foo=1旨在重新设置foo的值,那么该怎么办?测试它是否有意义?”--是否要重置foo
的值?如果是这样,就去做。如果你不这样做,就不要这样做。恐怕我不太明白你问题的核心。这似乎与bar
与foo
的关系有关,但我不确定。请小心,因为如果foo==0,即使foo已声明并具有值,foo也将被设置为1。非常好。实际上,我只对对象使用过它,而不是可能会受到类型转换影响的原语。