我是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>
答案 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>