Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在变量赋值后使用var声明变量_Javascript - Fatal编程技术网

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-我认为在回答技术问题时,应该使用适当的技术术语(最好来自相关标准和规范)。行话可能会有所帮助,但只有当它增加了清晰度并且应该加以解释时,它才不应该是完整的答案。说“你的代码被重写了”是一种误导。虽然可以说,编译器会将代码重新写入其他特定于机器的代码,但我认为,将重新编写原始代码等同于一个漫长的过程。