问题:下面的代码输出多少?修改代码让fnArri 输出 i。使用两种以上的方法
var fnArr = [];
for (var i = 0; i < 10; i ++) {
fnArr[i] = function(){
return i;
};
}
console.log( fnArr[3]() );
输出结果是10
解决:
方法1 立即执行函数,使用形参num传递参数(即每执行一次内层,有一个新的参数num)
var fnArr = [];
for (var i = 0; i < 10; i ++) {
(function (num){fnArr[i] = function(){
return num;
}})(i);
}
console.log( fnArr[3]() );
方法2 将变量i保存在匿名函数自身
var fnArr = [];
for (var i = 0; i < 10; i ++) {
(fnArr[i] = function(){
return arguments.callee.i;
}).i=i;
}
console.log( fnArr[3]() );
方法3 立即执行函数,局部变量传递参数
var fnArr = [];
for (var i = 0; i < 10; i ++) {
(function(){
var temp=i
fnArr[i] = function(){
return temp;
}
})();
}
console.log( fnArr[3]() );
方法4 返回函数的形式(在循环中,i由形参arg传入)
var fnArr = [];
for (var i = 0; i < 10; i ++) {
fnArr[i] = function(arg){
return function()
{return arg;}
}(i);
}
console.log( fnArr[3]() );
方法5 新建函数实例(Function生成的函数在创建时解析)
var fnArr = [];
for (var i = 0; i < 10; i ++) {
fnArr[i] = new Function("return(" + i + ");");//new可以省略
}
console.log( fnArr[3]() );
作者風逝,参考:http://www.cnblogs.com/syf/archive/2012/10/04/2711828.html
网友评论