2017-10-24 17 views
2

私は時々JSは次のように構築参照してください。Javascript:ラムダ関数の呼び出しと直接的な式の呼び出しの違い?

var foo = (function(){ return some_expression; })(); 

は何この理由することができますか?これは、はるかに簡単に別の任意の方法である:

var foo = some_expression; 

私はそのような例herewindow.requestAnimFrame = ...コード)に出くわしたことではなく、私は他の多くの場所でそれを見てきましたが起こります。

ラムダ関数でラップする理由の1つは変数をローカルに保持することですが、この特定の例では適用されません。

+0

コメントに記載されています:https://www.paulirish.com/2011/requestanimationframe-for-smart-animating/#comment-918142887著者はスクリプトに誤りがありましたが、 IIFEがそれを解決したと考えました。 – JJJ

+0

この例では、IIFEは意味がありません。あなたがリンクしているページの例では、そのポイントを見ていません。その他のページのコメントで、誰かがそれについて著者に尋ね、やや不満な答えを受けました。 – nnnnnn

+0

私はちょうど筋肉の記憶を推測する:) – shreyas

答えて

1

ECMAScript 5の前に、ECMAScript 5の前には違いがあるようではありませんが、windowオブジェクトのプロパティでundefined = "123"がその値を置き換えます。これは、このコード行の下にあるプログラムがこのようなものをチェックしようとするときはいつでも -

var foo; 
foo === undefined // false 

1つは間違った結果になることを意味します。

(function(foo, bar, undefined) { 
    // your code here 
    // undefined here will always be the correct value (i.e., undefined === undefined) regardless of it being polluted somewhere outside this block 
})(foo, bar) 

をしかし、これは事前にES5だった - これを避けるために

、このようなコーディングパターンを使用しました。だから、これ以上問題になることはありません

関連する問題