javascript为全局声明的变量返回undefined

时间:2013-02-08 06:04:58

标签: javascript

我是javascript的初学者。我有一个疑问。我的代码是下面给出的。当我运行这个第一个警告框显示&#34; unfind&#34; .i无法理解为什么?非常感谢.. < / p>

<html>
<head>
<script type="text/javascript">
var a = 123;
   function foo()
   {
     alert(a);
     var a = 890;
     alert(a);
   }
     foo();
     alert(a); 
</script>
</head>
<body>
</body>
</html>

3 个答案:

答案 0 :(得分:4)

这是因为在执行之后 之后,你的foo()函数在内部看起来像:

function foo() {
    var a; // declaration hoisted to top
    alert(a); // the local var is 'undefined' at this point
    a = 890; // assignment operation not hoisted
    alert(a);
}

了解更多关于吊装的信息:

答案 1 :(得分:1)

我认为这是因为变量声明提升。变量声明被提升到其范围的顶部。这意味着,从技术上讲,您的代码执行方式如下:

var a;
a = 123;
function foo()
{
  var a;
  alert(a);
  a = 890;
  alert(a);
}
foo();
alert(a); 

在此方案中,a首先在全球范围内定义,其值为undefined。然后,其值设置为123。调用该函数时,会在函数中立即声明一个新的a,并将undefined值作为局部变量,这就是为什么undefined首先被警告的原因。然后,将其值设置为890。因此,即使你在函数中间使用var,也不意味着它是如何执行的,因为它会被提升。

答案 2 :(得分:0)

您将变量初始化两次,这会产生奇怪的结果。现在它的范围是两次不同。

<html>
<head>
<script type="text/javascript">
var a = 123;
   function foo()
   {
     alert(a);
     a = 890;
     alert(a);
   }
     foo();
     alert(a); 
</script>
</head>
<body>
</body>
</html>