1

次のような自己呼び出し関数があります。

var f = (function f(){ return "123"; }, 
         function g(){ return 2; },
         function h(){ return "test"; })();

typeof f;

typeof fは常に、最後の関数定義で返されるものの型です。が最後である場合のようhに、それは です"string"が、私が削除hしてg最後として持っている場合は、"number"です。

誰かが理由を説明できますか?

4

3 に答える 3

7

,関数はコンマ演算子で区切られているためです。

これは、分離された式を評価し、最後の式の結果を返します。

var x = ("a", "b", "c");

console.log(x); // "c"

したがって、あなたの場合、囲んでいるグループの結果として最後の関数が返され、()それが後続の()関数呼び出しによって呼び出されます。

   // result from group---v   v---invoked
var f = (func1, func2, func3)()
于 2012-08-06T11:46:50.980 に答える
2

これを分解しましょう。

Javascript のコンマ演算子は、いくつかの式を評価し、最後の式を返します。

>>> "a", 1
1
>>> 1, "a"
"a"

したがって、3 つの無名関数をコンマでつなげると、最後の関数に評価されます。

>>> (function f(){ return "123"; }, function g(){ return 2; }, function h(){ return "test"; })
function h(){ return "test"; }

その結果を評価すると関数が実行され、 が返され"test"ます。

コンマ区切りリストの最後の関数が実行され、全体的な戻り値が決定されます。

于 2012-08-06T11:48:41.767 に答える
1

commaオペレーターは最後のアイテムを返します。あなたがしていることは次のようなものです:

var f = function(){}, function(){}, "string";

f最後の関数のみが呼び出されるため、文字列が作成されます。

于 2012-08-06T12:00:40.107 に答える