本文介绍了如果声明和变量提升的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在学习JavaScript中的变量提升,并发现这种行为很奇怪:

I am learning about variable hoisting in JavaScript, and found this behavior weird:

var x = 0;

(function () {
    //Variable declaration from the if statement is hoisted:
    //var x; //undefined

    console.log(x); //undefined

    if (x === undefined) {
        var x = 1; //This statement jumps to the top of the function in form of a variable declaration, and makes the condition become true.
    }
}());

这是否正确,在这种情况下,语句使条件成立,以便可以执行?

Is it correct, that in this case, the statement makes the condition true so it can be executed?

推荐答案

仅提升提升声明,但不提升任务。您的代码相当于:

Hoisting hoists only the declaration, but not the assignment. Your code is equivalent to:

var x = 0;

(function () {
    //Variable declaration from the if statement is hoisted:
    var x;

    console.log(x); //undefined

    if (x === undefined) {
        x = 1;
    }
}());

if语句的条件表达式求值为 true 到达 x = 1

The if statement's condition expression evaluates to true and x = 1 is reached.

这篇关于如果声明和变量提升的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-27 19:05