var foo = 'hello';
var myfunc = function() {
console.log(foo);
var foo = foo || 'world';
console.log(foo);
}
myfunc();
为什么第一个foo记录为'undefined'?
答案 0 :(得分:9)
因为使用“var”实际声明变量的哪一行是无关紧要的,只要它保持在同一个函数中。如果函数在其中的任何位置声明了var x
,则对该名称的任何引用都被视为声明它的作用域的本地。
当然,通常在声明变量之前不会引用变量,但请考虑以下代码:
function foo(a) {
if (a) {
var b = "something";
}
console.log(b);
}
变量b
是该函数的本地变量,因此无论a
的值如何,b
的使用都不会意外地引用在封闭范围内声明的变量。
注意:javascript只有函数级别作用域,它没有块级别作用域。