【发布时间】:2014-10-16 14:20:17
【问题描述】:
在一本书试图说明全局/局部变量范围时,它使用这个例子来传达这个概念:
test();
if (isset(bar)){
alert('bar must be global!');
}else{
alert('bar must be local!');
}
function test(){
var foo = 3;
bar = 5;
}
function isset(varname){
return typeof varname != 'undefined';
}
现在 if 返回警报“bar 必须是全局的。”,这是有道理的,因为传递给 isset() 的变量 bar,在这种情况下是全局的。但是为什么 if 语句不返回 alert('foo must be local');当你通过让我们说当你通过foo
在 isset 函数中。
【问题讨论】:
-
因为调用
isset()时没有声明符号“foo”。如果你从 inside “测试”函数调用isset(foo),它就会被设置。 -
因为您只使用
bar作为参数调用isset()一次。 -
我知道这在理论上是有道理的。但是
else不应该着火吗? -
没有。您在问“是否已定义栏”。答案是肯定的,所以
else不会被检查。 -
但我要说的不是 bar,而是使用 foo。理论上不应该 else 返回,因为它们不是全局变量。
标签: javascript scope