函数的变量范围

时间:2013-04-17 16:05:23

标签: javascript function scope

我执行这样的功能:

var a = 123;
function f() { 
  alert(a);
  var a = 9;
} 
f();

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

2 个答案:

答案 0 :(得分:9)

您的功能实际编译为:

function f() {
  var a; 
  alert(a);
  a = 9;
} 

因为变量提升:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/var#var_hoisting

因此,您的函数会将a重新声明为局部变量,其值为undefinedalert,然后将其值重新设置为9

alert时,由于悬挂,其值为undefined

答案 1 :(得分:0)

如果再次在函数语法中声明a成为新变量。如果要使用之前的值123,则不应包含var a = 9语句,因为它会创建一个新变量。 这可以详细解释: What is the scope of variables in JavaScript?