javascript - js 闭包问题(找到一个已经解决的答案)

查看:121
本文介绍了javascript - js 闭包问题(找到一个已经解决的答案)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

另一个解决问题的链接:https://segmentfault.com/q/1010000004671...

其实第一次的写法有点不合理,
var fuc=createFunctions();
console.log(fuc);
两段代码返回的都是一个函数数组,
改成console.log(fuc[0](2)),就发现问题所在了。

看书的时候有这么两段代码,书上解释得比较晦涩,求高人指点

function createFunctions(){
  var result = new Array();
  for(var i=0;i<10;i++){
      result[i]=function(){
          return i;
      };
  }
  return result;
}
var fuc=createFunctions();
console.log(fuc);

function createFunctions(){
  var result = new Array();
  for(var i=0;i<10;i++){
    result[i]=function(num){
      return function(){
        return num;
      };
    }(i);
  }
  return result;
}
var fuc=createFunctions();
console.log(fuc);

解决方案

第一段代码数组中存储的只是函数

for(var i=0;i<10;i++){
      result[i]=function(){
          return i;
      };
  }

变量i是createFunctions这个作用域中的,所以在后来的调用时是10。
第二段代码中打包了一个参数num,数组中每个函数都打包了这个定义时的参数,而在定义时这个参数各不相同,所以在后面的调用结果也就不同。
总之要记住,闭包是因为有内部作用域的参数进行了穿越,呵呵!

这篇关于javascript - js 闭包问题(找到一个已经解决的答案)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆