红皮书上有一个例子
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()