Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 测试未声明的变量是否在代码的前面定义有意义吗?_Javascript_Variables - Fatal编程技术网

Javascript 测试未声明的变量是否在代码的前面定义有意义吗?

Javascript 测试未声明的变量是否在代码的前面定义有意义吗?,javascript,variables,Javascript,Variables,我正在学习JavaScript,没有任何编程背景。在本例中,我认为我理解foo是一个未声明的(全局)变量,在计算bar时它不存在,因此bar=(未定义+1)或NaN var bar = foo + 1, foo = 1; 假设这是一长串代码的结尾。如果之前定义了foo,并且foo=1旨在重新设置foo的值,该怎么办?测试它有意义吗?我想我正在打开一个蠕虫的范围。。。。(“范围?你不能处理范围!”) 我提前感谢大家对我的学习曲线的耐心!任何你可以用类比或隐喻表达的答案都有助于我理解这一点

我正在学习JavaScript,没有任何编程背景。在本例中,我认为我理解foo是一个未声明的(全局)变量,在计算bar时它不存在,因此bar=(未定义+1)或NaN

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。非常好。实际上,我只对对象使用过它,而不是可能会受到类型转换影响的原语。