AFAIK,将变量声明悬挂在定义它们的上下文中,但是,在下面的代码中,取自此处
var foo = 1;
function bar() {
if (!foo) {
var foo = 10;
}
alert(foo);
}
bar();
if(!foo)
评估true
但为什么呢?我的意思是说在foo的上下文中进行评估之前var foo
,此语句已存在,因此应解析为,进一步解析为意味着if块不应执行,但评估为true,因此if块中的代码将被执行并发出警报10var foo = 10
if(!foo)
if(!foo)
if(!true)
if(false)
if (!foo)
有人可以告诉我为什么,并且重要的是如何评估if条件吗?
欢迎使用Java语言“吊装”,它令人讨厌的功能是可以进行看起来好像不是正在完成的事情:)
因此,发生了什么事情,就是Java没有if子句的块作用域,它以一种怪异的方式对此进行了补偿。我的意思是,当你这样做
function bar() {
if (!foo) {
var foo = 10;
}
alert(foo);
}
它实际上被翻译为:
function bar() {
var foo;
if (!foo) {
foo = 10;
}
alert(foo);
}
在执行之前,使所有变量都在使用前声明。基于此,foo
将在函数外部声明undefined
而不是在声明全局值。因此,当您致电时if (!foo)
,它将!undefined
一直进行评估true
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句