4

すぐに呼び出すことができるのは関数式だけです。

(function () {
    var x = "Hello!!";      // I will invoke myself
})();

しかし、関数宣言ではありませんか? これは、関数宣言が巻き上げられ、すでにすぐに実行されているためですか?

編集:私が参照しているリソース

http://benalman.com/news/2010/11/immediately-invoked-function-expression/

http://markdalgleish.com/presentations/gettingclosure/

4

3 に答える 3

2

混乱を解消するには

関数宣言とは

// this is function declaration
function foo(){
  // code here
}

また

//this is ok, but without name, how would you refer and use it
function (){
  // code here
}

すぐに呼び出すには、これを行います

function foo(){
  // code here
}()

関数式とは

// this is a function expression
var a = function foo(){
 // code here
};

また

var a = function (){
  // code here
};

2 番目のケースでは、無名関数を作成しました。変数を介して関数への参照がまだ残っているため、a実行できますa()

関数式の呼び出し

var a = (function (){
  // code here
}());

変数 a は関数の結果とともに格納され (関数から戻った場合)、関数への参照が失われます。

どちらの場合も、すぐに関数を呼び出すことができますが、上記のように結果が異なります。

于 2014-10-13T07:38:39.713 に答える
1

正確な意味がわからない-示した方法で関数宣言を実行しても、すぐに実行されます

(function declaredFn(){
  document.getElementById('result').innerHTML='executed';
}());
<div id="result"></div>

于 2014-10-13T07:21:54.947 に答える