为了账号安全,请及时绑定邮箱和手机立即绑定

结果为什么是不是4呢?

结果为什么是不是4呢?

繁星coding 2019-02-05 19:06:56
function makeClosures(arr, fn) {    var result = new Array();     for(var i=0;i<arr.length;i++){        result[i] = function(){            return fn(arr[i]);        };    }    return result;}console.log(makeClosures([1, 2, 3], function (x) {    return x * x;}));
查看完整描述

2 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

    function makeClosures(arr, fn) {

      let result = new Array();

      // 如果用var,注意闭包问题

      for (let i = 0, len = arr.length; i < len; i++) {

        result[i] = function () {

          return fn(arr[i]);

        };

      }

      return result;

    }

    let testArr = [1, 2, 3]

    let fn = function (x) {

      return x * x;

    }

    // 条件一, 返回一个函数数组,长度和arr相同

    let result = makeClosures([1, 2, 3], fn);

    // 条件二, result[i]() 和 fn(arr[i]) 结果相同

    console.log('测试 i = 0', 'result[i]: ', result[0](), ' fn(arr[i]): ', fn(testArr[0])) // 1

    console.log('测试 i = 1', 'result[i]: ', result[1](), ' fn(arr[i]): ', fn(testArr[1])) // 4

    console.log('测试 i = 2', 'result[i]: ', result[2](), ' fn(arr[i]): ', fn(testArr[2])) // 9


查看完整回答
反对 回复 2019-03-13
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

你这题目是不是有问题
搜了一下 输出是个函数 result[1]()的结果是4

输入例子:
[1, 2, 3], function (x) { 
return x * x; 
}
输出例子:

result[1]()

4


查看完整回答
反对 回复 2019-03-13
  • 2 回答
  • 0 关注
  • 619 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信