Javascript语句的执行顺序
我刚刚测试了这条语句,发现一个错误,指出Javascript语句的执行顺序,javascript,function,variables,Javascript,Function,Variables,我刚刚测试了这条语句,发现一个错误,指出confirm不是函数 我立即检测到变量名正在覆盖它。然而,我的问题是为什么 我知道函数是第一类的,声明一个与函数同名的变量将在相对范围内覆盖它。但我的困惑来自于我认为是从“右到左”的执行顺序,即函数调用是在确定目标之前进行的 在这种情况下,变量是在函数调用之前定义的吗?由于JavaScript的变量提升: var confirm = confirm('Are you sure?'); 变成: function myFunction() { //
confirm
不是函数
我立即检测到变量名正在覆盖它。然而,我的问题是为什么
我知道函数是第一类的,声明一个与函数同名的变量将在相对范围内覆盖它。但我的困惑来自于我认为是从“右到左”的执行顺序,即函数调用是在确定目标之前进行的
在这种情况下,变量是在函数调用之前定义的吗?由于JavaScript的变量提升:
var confirm = confirm('Are you sure?');
变成:
function myFunction() {
// ...
var confirm = confirm('Are you sure?');
// ...
}
您需要执行以下操作来强化您的意思:
function myFunction() {
var confirm;
// ...
confirm = confirm('Are you sure?');
// ...
}
“在这种情况下,变量是在函数调用之前定义的吗?”-是。在给定范围内,所有变量都是在该范围内的代码执行之前定义的,并且它们最初被赋予值
undefined
。仔细阅读JS变量“highing”。这里看起来很好var
不是一个可执行语句,受从上到下或从右到左的规则或任何其他执行顺序的约束。正如@nnnnn所说,这是一个被提升的声明。@Naeem Shaikh-这是不同的,因为在你的小提琴中有一个函数声明和一个名为confirm
的变量。OP(大概)希望函数调用是window.confirm()
。函数声明有点像变量声明。因此,一旦confirm(){}
函数声明了confirm
,那么var confirm
就不会重新声明它。类似地,如果您多次使用var confirm
,则第二次和后续操作不会重新声明它。(还要注意,如果您只想提示用户您根本不需要变量,只需if(confirm('you sure?'){/*do something*/}
)。在任何情况下,像这样重写confirm()
函数都不是一个好主意。您可能需要var confirmResult=window.confirm('You sure?')代码>保存它clean@deitch这是我的失误,我已经重新命名了变量。我只是想知道是什么导致了这种行为:)明白了。我认为@Phylogenesis用变量提升很好地解释了这一点。
function myFunction() {
// ...
var confirm = window.confirm('Are you sure?');
// ...
}