最近、 json2.js の現在のバージョンとプロジェクトで使用していたバージョンを比較していましたが、関数式の作成方法と自己実行方法の違いに気付きました。
匿名関数を括弧で囲んで実行するために使用されるコード、
(function () {
// code here
})();
しかし今では、自動実行された関数を括弧で囲んでいます。
(function () {
// code here
}());
JavaScriptのカプセル化された匿名関数構文の説明 その「両方:(function(){})();
および(function(){}());
は有効です。」
私は違いが何であるかと思っていましたか?前者は、グローバルな匿名関数を残してメモリを消費しますか?括弧はどこにあるべきですか?
それらはほぼ同じです。
最初の関数は、関数を括弧で囲んで有効な式にし、呼び出します。式の結果は未定義です。
2番目は関数を実行し、自動呼び出しを囲む括弧はそれを有効な式にします。また、未定義と評価されます。
式の結果は同じであるため、それを行う「正しい」方法はないと思います。
> function(){}()
SyntaxError: Unexpected token (
> (function(){})()
undefined
> (function(){return 'foo'})()
"foo"
> (function(){ return 'foo'}())
"foo"
その場合は問題ではありません。最初の定義では関数に解決される式を呼び出し、2番目の例では関数を定義してすぐに呼び出しています。最初の例の関数式は単なる関数定義であるため、これらは似ています。
関数に解決される式を呼び出すための、他の明らかに便利なケースがあります。
(foo || bar)()