函数的变量范围

hh5*_*188 3 javascript scope function

我执行这样的函数:

var a = 123;
function f() { 
  alert(a);
  var a = 9;
} 
f();
Run Code Online (Sandbox Code Playgroud)

结果是undefined,为什么会这样?为什么不123呢?

Ian*_*Ian 9

您的函数实际编译为:

function f() {
  var a; 
  alert(a);
  a = 9;
} 
Run Code Online (Sandbox Code Playgroud)

因为可变吊装:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/var#var_hoisting

所以,你的功能redeclares a与作为值的局部变量undefined,alert原来是这样,然后重新将其值设置9.

在此时alert,它的价值是undefined因为吊装.