2012-10-05 44 views
3

可能重复:
is there any Advantage of redeclaring javascript variables?声明变量使用VAR分配后至可变

为什么以下代码显示器1而不是未定义:

a = 1; 
var a; 
alert(a); 
+0

为什么你会_think_它应该提醒'undefined'?你已明确指定'a'! –

+0

我最初的假设是变量将被重新声明。我通过运行代码知道作业仍然存在,但不知道为什么。我想我可以放弃'而不是未定义'部分,但认为它会添加一些上下文。 – markm247

回答

9

1) var不重新声明或删除变量

2)即使它,你的代码被改写*使用JavaScript提升规则(任何变量或函数声明被移到最近的封闭功能的顶部)如下:

var a; 
a = 1; 
alert(a); 

(*有效改写;请参阅RobG关于输入执行上下文的注释和链接以进行说明)

+0

+1变量提升 – jimp

+0

有趣的是,这是JavaScript解释器的通用规则? –

+1

@ AntoineLafarge - 这是每个ECMA-262在[输入执行上下文](http://ecma-international.org/ecma-262/5.1/#sec-10.4)(全局或函数)上的指定行为。首先将[声明的函数和变量](http://ecma-international.org/ecma-262/5.1/#sec-10.5)添加到variableEnvironment中,然后执行代码。你的回答比这个更正确。 – RobG