function foo(){ for(var i = 1 ; i < 4 ; i ++){ setTimeout(function(){ console.log(i)},0); } } foo(); //输出结果是 4,4,4 //要想输出1,2,3 //采用自执行匿名函数 function foo(){ for(var i = 1 ; i < 4 ; i ++){ setTimeout((function(a){console.log(a)})(i),0); } }
关于自执行匿名函数可以参考
http://www.cnblogs.com/tomxu/archive/2011/12/31/2289423.html
//大致意思是这样 var foo = function () {} //foo + () 就是执行这个方法 foo() //函数的另外一种定义 function(){} //我们加上括号就会报错 function(){} () //但是当我们用 () 包住前面一段代码的时候 //像下面这样 就不会报错, 这也就是常遇到自执行函数了 (function(){})()
//去除重复的字符串 数组中 var deduplication = function (arr){ if(!arr instanceOf Array){ return ; } var len = arr.length ; if(len <= 1){ return arr ; } var ret = arr[0]; for(var i = 1 ; i < len ; i++){ if(ret.indexOf(arr[i]) == -1){ ret = ret + arr[i]; } } return ret.split(""); }
//计算n! var cal = function(n){ if(n <= 1){ return 1 ; }else{ //return n * cal(n-1); return n * arguments.callee(n-1); } }