重複の可能性:
javascriptの自己実行関数の目的は何ですか?
JavaScriptのカプセル化された無名関数の構文を説明する
例えば:
(function($) {
document.getElementById("foo").innerHTML = 'bar';
})();
変数の衝突を防ぐために独自のスコープを作成したいのですが、なぜjavascriptに()()が必要なのですか?
重複の可能性:
javascriptの自己実行関数の目的は何ですか?
JavaScriptのカプセル化された無名関数の構文を説明する
例えば:
(function($) {
document.getElementById("foo").innerHTML = 'bar';
})();
変数の衝突を防ぐために独自のスコープを作成したいのですが、なぜjavascriptに()()が必要なのですか?
これにより、自己呼び出し型の無名関数になります。
(function() {
/* function body */
}) /* <-- end of function definition */ (); // <-- invoke that function immediately
それはありません()()
、あります(function(){})()
。
関数の構文はfunction(){}
であり、関数呼び出し演算子は()
です。関数をラップする括弧は技術的に特別なものではなく、代わりに次のように置き換えることができます!
。
!function(){}()
これを行うと機能しません:
function(){}()
これはステートメントコンテキストであるため、function
は式ではなく関数宣言を開始します。関数宣言には名前が必要なため、構文は失敗します。
!function(){}
(または)がある場合、 (または)はすでに式を予期している(function(){}
ため、ステートメントにすることはできません。したがって、式として扱われます。!
(
したがって、余分なものなしでこれを行うことができます:
var a = function() {
return false;
}();
var a =
はすでに式を期待しているためfunction
、関数宣言の開始にはなり得ない可能性があります。
関数が式または宣言として表示されるかどうかをリトマス試験する簡単な方法は、自問することです。ここで使用できvar x
ますか?
例えば:
var x; //all is fine, so if I said function here, it would be a start of a function declaration
(var x) //Gives an error, so replacing var x with a function would be a function expression
var myVar = var x; //Gives an error, so replacing var x with a function would be a function expression
等々
(2)
最初の結果は、結果と同じ方法で関数になり2
ます。2番目はそれを呼び出します。