3

重複の可能性:
JavaScript: var functionName = function() {} vs function functionName() {}

私は CodeAcademy の Javascript コースを受講してきましたが、いくつかのことが頭から離れませんでした。関数がどのように機能するかを理解しており、OOP とオブジェクト/メソッドに頭を悩ませようとしています。

私の質問は、このような関数を作成することの違いは何ですか:

function countTo(number){
    for (var i=1; i<=number; i++){
        console.log(i);
    }
}

countTo(15);

次のような関数を作成します。

var countToTwo = function(number){
    for (var i=1; i<=number; i++){
        console.log(i);
    }
};

countToTwo(27);

どちらも同じことを行い、同じ出力を持ちます。それらはまったく同じ/互換性がありますか? 関数を作成するときにどちらを使用しても問題ありませんか?

4

1 に答える 1

8

最初のものは関数宣言であり、「ホイスト」されます。つまり、コンテキスト内のどこでもすぐに使用できます。

2 つ目は関数式で、他の変数宣言/代入と同じように扱われます。の宣言countToTwo引き上げられ、宣言されたスコープ内のどこでもすぐに利用できますが、割り当てはまったく同じ場所にとどまります。

要するに、式が解析されるまで、式として宣言された関数を呼び出すことができないということです。

このコードは、もう少し明確に示す必要があります。

foo();

//blah();

function foo(){
    alert('hoisted and works');
}

var blah = function(){
    // not hoisted, would fail if called
}
​

ライブデモ

于 2012-12-11T03:40:38.467 に答える