2

JavaScript での変数ホイストについて学んでいますが、この動作が奇妙であることがわかりました。

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.
    }
}());

この場合、ステートメントは条件を真にして実行できるというのは正しいですか?

4

2 に答える 2

5

ホイストは宣言のみをホイストし、代入はホイストしません。あなたのコードは以下と同等です:

var x = 0;

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

    console.log(x); //undefined

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

if ステートメントの条件式が評価されtruex = 1到達します。

于 2015-12-08T06:55:11.347 に答える