javascript变量访问之谜

时间:2010-09-19 10:53:46

标签: javascript global-variables

var foo = 'hello';

var myfunc = function() {
  console.log(foo);
  var foo = foo || 'world';
  console.log(foo);
}

myfunc();

为什么第一个foo记录为'undefined'?

1 个答案:

答案 0 :(得分:9)

因为使用“var”实际声明变量的哪一行是无关紧要的,只要它保持在同一个函数中。如果函数在其中的任何位置声明了var x,则对该名称的任何引用都被视为声明它的作用域的本地。

当然,通常在声明变量之前不会引用变量,但请考虑以下代码:

function foo(a) {
   if (a) {
     var b = "something";
   }
   console.log(b);
}

变量b是该函数的本地变量,因此无论a的值如何,b的使用都不会意外地引用在封闭范围内声明的变量。

注意:javascript只有函数级别作用域,它没有块级别作用域。