2

問題に関する他のトピックから読んだことから、SIAFまたはSelf Invoking Anonymous Functionsは単にコンテナとして機能するためのものであり、変数の範囲を制限します(私が学んだことから)。さて、問題は、なぜこれを行うことができるかということです:

$("ul>li").click((function(){

}));

しかし、その後に別の SIAF を追加しませんか? そのようです:

$("ul>li").click((function(){

}));

(function(){

});

これは奇妙です。これは、SIAFだけでIDEにエラーが発生しないためです。

$("ul>li").click((function(){

}));

(function(){

});
4

1 に答える 1

9

これ:

(function() { .. });

はno-op式であり、特に関数呼び出しは含まれません。関数オブジェクトはインスタンス化されますが、使用されることはありません。

これ:

(function() { ... })();

末尾が()関数を呼び出すため、何かを実行します。(それ自体は呼び出されません。)

JavaScriptでは、関数への参照は単なる値であり、関数は単なるオブジェクト(まあ、特別なオブジェクト)です。関数への参照の後に括弧で囲まれた値のリストが続く場合、それは関数呼び出しです。関数への参照がどこから来ているかは関係ありません。(それがどこから来たのかは、関数呼び出しのセマンティクスに影響を与える可能性がありますが、関数呼び出し自体の基本的な事実には影響しません。)

編集—「自己呼び出し関数式」という用語はある程度の意味を持っています。私は論争に巻き込まれることはありませんが、実際には関数は外部からそれ自体を呼び出すことができないため、代替の「即時呼び出し関数式」よりも正確ではないと思います。それ自体への呼び出しを含めることができますが、それはまったく別のことです。しかし、私はその用語の精神を理解しており、無害だと思います。

于 2012-12-28T19:14:19.377 に答える