在一本试图说明全局/局部变量范围的书中,它使用这个例子来传达这个概念:
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语句没有返回警报(' foo必须是本地的');当你通过时我们会说你通过foo
在isset函数中。
答案 0 :(得分:2)
"杆"未在函数test()中的任何位置声明。 Javascript然后假设它是一个全局变量。
为确保您不会犯这些错误,我建议您使用:
"use strict";
将该行放在文件的开头。它可以防止出现很多错误:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
它将阻止未声明的变量充当全球变量
答案 1 :(得分:1)
由于您尚未使用var关键字,因此该变量在全局范围内定义,并且在执行测试功能后仍然存在。这将得到更彻底的解释here。