var confirm = confirm('Are you sure?');
我刚刚测试了这个声明,并且给出了一个错误,指出confirm
不是函数。Javascript Statement执行命令
我立即检测到变量名称正在覆盖它。然而我的问题是为什么?
我知道函数是第一类,并且声明与函数同名的变量将在相对范围内覆盖它。但是我的困惑来自于我认为是从右到左的执行顺序,I.E.函数调用在确定目标之前进行。
在这种情况下函数调用之前变量是否被定义?
var confirm = confirm('Are you sure?');
我刚刚测试了这个声明,并且给出了一个错误,指出confirm
不是函数。Javascript Statement执行命令
我立即检测到变量名称正在覆盖它。然而我的问题是为什么?
我知道函数是第一类,并且声明与函数同名的变量将在相对范围内覆盖它。但是我的困惑来自于我认为是从右到左的执行顺序,I.E.函数调用在确定目标之前进行。
在这种情况下函数调用之前变量是否被定义?
由于JavaScript的变量提升:
function myFunction() {
// ...
var confirm = confirm('Are you sure?');
// ...
}
变为:
function myFunction() {
var confirm;
// ...
confirm = confirm('Are you sure?');
// ...
}
您将需要执行以下操作来执行你的意思:
function myFunction() {
// ...
var confirm = window.confirm('Are you sure?');
// ...
}
_“是否变量成为在这种情况下在函数调用之前定义?“_ - 是的。在给定范围内,所有变量都在该范围内的代码执行之前被定义,并且它们最初被赋予值“undefined”。阅读JS变量“提升”。 – nnnnnn 2014-11-21 11:36:37
在这里看起来很好http://jsfiddle.net/batug0o5/1/ – 2014-11-21 11:39:37
'var'不是可执行语句,受制于从上到下或从右到左的规则或任何其他执行顺序。这是一个**声明**,正如@nnnnn所说,它已经被挂起。 – 2014-11-21 11:40:34