紅皮書上有一個例子
function createFunctions(){ var result = new Array(); for (var i=0; i < 10; i++){ result[i] = function(n){return function(){return n;};}(i); } return result; } var funcs = createFunctions(); //every function outputs 10 for (var i=0; i < funcs.length; i++){ document.write(funcs[i]() + "<br />"); }
想看看匿名函數的替代寫法,於是嘗試修改,變換一種寫法,發現得到了一樣的結果。
function createFunctions(){ var result = new Array(); for (var i=0; i < 10; i++){ result[i] = subFunc(i);//function(n){return function(){return n;};}(i); } return result; } function subFunc(n){ return function(){ return n; } } var funcs = createFunctions(); alert(funcs); //every function outputs 10 for (var i=0; i < funcs.length; i++){ document.write(funcs[i]() + "<br />"); }
這說明,
result[i]=function(n){return function(){returnn;};}(i); 相當於
result[i]=subFunc(i); function subFunc(n){return function(){ return n;} }
像第一個例子這樣就是定義匿名函數並立即執行的用法啦。
發現有好多種寫法可以定義並且立即執行匿名函數,現羅列於下方,供日後備用。
1 (function(){alert("hi!")})();
2 (function(){alert("hi!")}).call();
3 (function(){alert("hi!")}).apply()
4 var func=function(){alert("hi!")}();
5 var func=function(){alert("hi!")}.call();
6 var func=function(){alert("hi!")}.apply()