定义并立即执行匿名函数的用法

红皮书上有一个例子

            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()
 


你可能感兴趣的:(匿名函数)