2

コード内の位置に関係なく、先頭に変数を定義するように教えられてきました。これは、JavaScript が物事を解釈する方法だからです。したがって、私の理解は次のとおりです。

var foo = "Bob";

if (2 + 2 === 4) {
    var car = "Blah";
}

次のように解釈されます。

var foo = "Bob",
    car;

if (2 + 2 === 4) {
    car = "Blah";
}

私の理解は正しいですか?私は常に変数定義を現在のスコープの一番上に配置しようとしましたが、それらの変数がifステートメント内でのみ必要な場合があるため、それらを外部で定義するのは少し奇妙に思えます-これはまだベストプラクティスですか?

4

3 に答える 3

5

はい。varステートメントが巻き上げられます (これが、関数の先頭でステートメントを使用するのがベスト プラクティスである理由です。これにより、関数スコープではなくブロック スコープを想定する人々からの混乱を避けることができます)。

于 2012-04-27T13:21:45.337 に答える
4

はい。変数と関数の宣言は、それらが定義されているスコープの一番上に持ち上げられます。JavaScriptには関数スコープしかありません(ブロックスコープはありません)ので、例のスコープの上部はifステートメントの外側にあります。

関数式は事実上単なる変数宣言であるため、関数自体は引き上げられないことに注意してください(割り当ては意図した場所で行われるため)。つまり、割り当て後にのみ利用可能になります...

sayHello(); //Uh-oh... TypeError, undefined is not a function!
var sayHello = function() {
    console.log("Hi!");
};

...ソースで定義される前に使用できる関数宣言とは対照的です。

sayHello(); //"Hi!"
function sayHello() {
    console.log("Hi!");
}
于 2012-04-27T13:21:56.807 に答える
1

はい、スコープの上にそれらを定義することは常に良いことです(そしてjavascriptは関数スコープです)、これについてもっと読むことができます

于 2012-04-27T13:22:56.483 に答える