5

重複の可能性:
(function(){})();の違い およびfunction(){}();
「(function(){})()」と「(function(){}())」はJavaScriptで機能的に同じですか?

これらの2つの例の間に(機能に関して)違いがあるかどうか疑問に思いました:

1位

(function foo() {
console.log("bar")
})()

2位

(function foo() {
console.log("bar")
}())

どちらも正常に動作しているようです...

ありがとう!

4

3 に答える 3

10

変わりはない。実際、あなたは()単純な理由だけで使用する必要があります...

function() { console.log('bar'); } ();

...JSパーサーによって正しく認識されません。ES5標準で述べたように:

また、ExpressionStatementはfunctionキーワードで開始できません。これは、FunctionDeclarationであいまいになる可能性があるためです。

代替の(to (...))ソリューションは、このステートメントを単項演算子で拡張することです。両方...

+function() { console.log('bar'); } ();

... と ...

!function() { console.log('bar'); } ();

... 動作します。

于 2012-12-23T13:56:58.997 に答える
4

それらはまったく同じです。効率、出力、または使用の点で、2つの間に何の違いもありません。どちらかを使用するのは好みの問題です。

JSminfiersによって一般的に使用される2つの形式の短いバリエーションがありますが。つまりNOT、関数式を論理化して呼び出すと、次のようになります。

!function() {
    console.log( x );
}();​
于 2012-12-23T13:56:46.147 に答える
2

それらの間に違いはありません。どちらもすぐに呼び出される関数式です。ダグラス・クロックフォードのよ​​うな一部の人々は、2番目の方法を好みます。最初のものを好む人もいます。興味深いことに、CrockfordのJSLintは最初の方法を許可していないので、2番目の方法がより一般的であると思います。

ああ、関数式の代わりに関数宣言を使用する場合は、プログラムに表示される前に関数を呼び出すことができます。これは、JavaScriptで宣言が引き上げられているためです。

greet(); // This will work

function greet() {
    alert("Merry Christmas!");
}

同じことは関数式には当てはまりません。

greet(); // This will not work

var greet = function greet() {
    alert("Merry Christmas!");
};

今のところ知っておく必要があるのはこれだけです。

于 2012-12-23T14:08:48.640 に答える