3

我是 javascript 的初学者。我有一个疑问。下面给出了我的代码。当我运行这个时,第一个警报框显示“未定义”。我不明白为什么?非常感谢..

<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>
4

3 回答 3

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);
}

在此处阅读有关吊装的更多信息:

于 2013-02-08T06:07:42.390 回答
1

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

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

在这种情况下,a首先在全局范围内定义一个undefined值。然后,将其值设置为123。当函数被调用时,a会立即在函数中声明一个 newundefined值作为局部变量,这就是为什么undefined首先会发出警报。然后,您将其值设置为890。因此,即使您var在函数中间使用,也并不意味着它就是这样执行的,因为提升。

于 2013-02-08T06:08:12.883 回答
0

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

<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>
于 2013-02-08T06:09:46.300 回答