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?');
    // ...
}