6

間の任意の違い

var myfunc = (function () { return function () { ... } }());

var myfunc = function () { return function () { ... } }();

それは単なるスタイルの問題ですか、それとも最初の形式の周囲の () にもっとあるのでしょうか?

4

5 に答える 5

6

いいえ。または、少なくともあなたの例ではありません。

外側の括弧は、関数キーワードがステートメントの最初のトークンになる場合にのみ重要です。

// cool
var foo = function(){}();
var foo = (function(){}());

// also cool
(function(){}());

// not cool, syntax error
// parsed as function statement, expects function name which is missing
function(){}();

// also not cool, syntax error
// declares a function, but can't be executed immediately
function foo(){}();

がステートメントの最初のトークンである場合function、それは関数宣言 (名前function付き関数と考えてください) であり、他のすべてのコンテキストとは少し異なる動作をします。その先頭の括弧は、代わりに関数式 (無名関数と考えてください) のように処理するように解析に強制し、これにより即時実行が可能になります。

参照: JavaScript での関数式と宣言の違いは何ですか?

変数宣言など、別の何かで行またはステートメントを開始しても、技術的にはまったく問題ありません。

于 2013-06-27T01:05:35.813 に答える
1

違いはありませんが、関数式として扱われていることを確認するために、Crockford は前者の使用を勧めています。

詳細については、次をお読みください。

于 2013-06-27T01:04:29.977 に答える
0

違いはありません。スタイルの問題です。どちらも実行される関数であり、変数に返すものは何でも返し、関数を返しています。これをチェックしてください

于 2013-06-27T01:04:38.307 に答える
0

技術的な違いはありません。これは、自己呼び出し関数であることを最初に知らせるために読みやすさのために使用される慣用的なスタイルです。

于 2013-06-27T01:05:43.630 に答える
0

目的はグローバルスコープを回避することであり、本質的に目的を無効にvar myfunc =する前に追加します(function (){ return function(){}}());

2つを比較する

(function(){...do something...}());

この関数は、括弧内にあるローカル スコープで実行されます。

var myfunc = function(){};

この関数はグローバル スコープで実行されます。var他のメソッドやプラグインの名前と競合する可能性があり、グローバルスコープに保存されるvarとアプリケーションのパフォーマンスが低下する可能性があるためです。var

私は好む

(function() {})();
于 2013-06-27T01:06:00.730 に答える