美文网首页
for循环闭包

for循环闭包

作者: 饥人谷_風逝 | 来源:发表于2017-03-16 19:59 被阅读0次

问题:下面的代码输出多少?修改代码让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

相关文章

  • Swift入门二(对象函数)

    函数 闭包 GCD 尾随闭包 闭包循环引用解决(OC) 闭包循环引用解决(swift推荐) 面向对象 命名空间: ...

  • swift-闭包

    闭包 闭包定义 闭包简化 - 尾随闭包 闭包参数 闭包返回值 闭包的循环引用

  • iOS闭包循环引用精讲

    iOS闭包循环引用精讲 iOS闭包循环引用精讲

  • 学习JS笔记(第七章-闭包,作用域)

    闭包的概念## 闭包实例## 数据传递更加灵活### 常见错误之循环闭包### 封装变量### 闭包小结## 作用...

  • Swift5.0 闭包

    本文目录: 闭包 尾随闭包 逃逸闭包 自动闭包 循环引用 闭包 全局函数:有名字,不捕获任何值; 嵌套函数:有名字...

  • Swift语法--12-3闭包的循环引用

    Swift语法--12-3闭包的循环引用 闭包循环引用产生条件 如果在HttpTool中有对闭包进行强引用,则会形...

  • JS之闭包与IIFE

    本篇文章主要讨论了: JavaScript引擎 全局对象 闭包 循环 + 闭包 IIFE + 闭包 1.JavaS...

  • for循环闭包

    问题:下面的代码输出多少?修改代码让fnArri 输出 i。使用两种以上的方法 解决:方法1 立即执行函数,使用形...

  • Swift闭包注意事项

    解决闭包的循环强引用 在定义闭包时同时定义捕获列表作为闭包的一部分,通过这种方式可以解决闭包和类实例之间的循环强引...

  • js闭包的一些用法

    闭包存循环的索引值 闭包做私有变量计数器 闭包做选项卡

网友评论

      本文标题:for循环闭包

      本文链接:https://www.haomeiwen.com/subject/gpfdnttx.html