我正在尝试了解Javascript中的变量范围,一位朋友问我这个问题。我可以在这里使用一些帮助。
function abc(){
var a = b = 10; // a is local, b is global variable. Right?
c = 5; // c is global variable
}
d = 20; // d is global variable
console.log(b); // b is not defined error. Why? Isn't b a global variable?
console.log(c); // Again, Why is 'c not defined'.
我在chrome控制台中运行了这段代码。我不应该期待10和5在控制台?它给出'b未定义','c未定义'错误。如果b,c是全局变量,为什么会发生这种情况呢? console.log(d)工作正常。
这是fiddle。
答案 0 :(得分:4)
如果
b
,c
是全局变量,为什么会这样?
b
和c
仅在您实际致电 abc
时创建。仅仅定义该函数并不会神奇地执行它的正文。
function abc(){
var a = b = 10; // a is local, b is global variable.
c = 5; // c is global variable
}
// call abc to execute the statements inside the function
abc();
console.log(b); // 10
console.log(c); // 5
也就是说,隐含地创建全局变量仍然不好。尽可能避免使用全局变量,如果不是,则通过分配给全局对象(浏览器中为window
)显式声明它们。
答案 1 :(得分:1)
编辑:这就是为什么我喜欢这样,即使你知道这一切,你也会学到一些知识并回答你明显没有装备的问题 回答。感谢@ FelixKling的澄清,我已更新此内容以反映
var
s
所以这里有一些术语混淆:
Javascript具有功能级别范围:a
和b
在function
块内声明,它们是function
的本地{}在function
的范围内声明并受其限制。
一个函数(或 举个例子:window
对象上的浏览器,global
对象中的节点)中定义的变量,具有global
范围。< / p>
因此 var
关键字实际上与global
范围无关,范围由声明变量的位置定义。function abc(){
var a = b = 10; //a is local, b is global (see @FelixKling's answer)
c = 5; // c is global as it is not prefixed with the `var` keyword
}
var d = 20; // d is global
console.log(a); // logs "10" to the console
console.log(b); // b is not defined
console.log(c); // 'c not defined'.
console.log(d); // logs 20 to the console.