Javascript 在变量赋值后使用var声明变量
可能重复:Javascript 在变量赋值后使用var声明变量,javascript,Javascript,可能重复: 为什么以下代码显示1而不是未定义: a = 1; var a; alert(a); 1) var不会重新声明或删除变量 2) 即使这样,您的代码也会使用javascript提升规则重写*(任何变量或函数声明都会移动到最近的封闭函数的顶部),如下所示: var a; a = 1; alert(a); (*有效重写;请参阅RobG关于输入执行上下文的评论和链接以获得澄清)您认为它为什么应该提醒未定义的?您已经清楚地分配了a!我最初的假设是变量将被重新声明。我通过运行代码知道任务仍然
为什么以下代码显示1而不是未定义:
a = 1;
var a;
alert(a);
1) var
不会重新声明或删除变量
2) 即使这样,您的代码也会使用javascript提升规则重写*(任何变量或函数声明都会移动到最近的封闭函数的顶部),如下所示:
var a;
a = 1;
alert(a);
(*有效重写;请参阅RobG关于输入执行上下文的评论和链接以获得澄清)您认为它为什么应该提醒
未定义的
?您已经清楚地分配了a
!我最初的假设是变量将被重新声明。我通过运行代码知道任务仍然存在,但不知道为什么。我想我本可以省略“而不是未定义”部分,但我认为它会添加一些上下文。+1对于变量提升感兴趣,这是javascript解释器的一般规则?@AntoinalAfarge,这是ECMA-262规定的(全局或函数)行为。首先将添加到variableEnvironment,然后执行代码。你的回答比这个更正确。@RobG“提升”仍然是正确的概念,即使“移动”是解释提升的错误动词。@MattBall-我认为在回答技术问题时,应该使用适当的技术术语(最好来自相关标准和规范)。行话可能会有所帮助,但只有当它增加了清晰度并且应该加以解释时,它才不应该是完整的答案。说“你的代码被重写了”是一种误导。虽然可以说,编译器会将代码重新写入其他特定于机器的代码,但我认为,将重新编写原始代码等同于一个漫长的过程。