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

类型错误:fns[(x * 2)] 不是函数

类型错误:fns[(x * 2)] 不是函数

蝴蝶刀刀 2023-07-20 15:08:58
所以我有一个作业问题需要解决。要求只是修复代码,以便控制台显示 true var x = 2, fns = [];(function () {  var x = 5;  for (var i = 0; i < x; i++) {  //  write here   }})();// DO NOT MODIFY BELOW CODEconsole.log(x * 2===fns[x * 2]());// console must show true控制台输出是未捕获的类型错误:fns[(x * 2)] 不是函数我尝试重写函数作为数组中的元素之一,但控制台仍然显示错误。我重写了fns[x * 2]()to fns[x * 2],控制台显示 return false (这很好,因为至少它不会抛出错误),但无法根据要求修改它
查看完整描述

2 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

数组的每个元素都需要是一个返回其在数组中当前索引的函数:


var x = 2,

  fns = [];


(function() {

  var x = 5;


  for (let i = 0; i < x; i++) {

    fns[i] = () => i;

  }

})();


// DO NOT MODIFY BELOW CODE

console.log(x * 2 === fns[x * 2]());

// console must show true

确保用 , letnot声明索引变量varvar 有问题)。

或者,更实用的是:

const fns = Array.from(

  { length: 5 },

  (_, i) => () => i

);


let x = 2;

// DO NOT MODIFY BELOW CODE

console.log(x * 2 === fns[x * 2]());

// console must show true


查看完整回答
反对 回复 2023-07-20
?
鸿蒙传说

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

您需要一个带有 IIFE 的闭包来获取该值。


var x = 2,

    fns = [];


(function() {

    var x = 5;


    for (var i = 0; i < x; i++) {

        fns[i] = function (v) {

            return function () { return v; };

        }(i);

    }

})();


// DO NOT MODIFY BELOW CODE

console.log(x * 2 === fns[x * 2]());

// console must show true


查看完整回答
反对 回复 2023-07-20
  • 2 回答
  • 0 关注
  • 75 浏览
慕课专栏
更多

添加回答

举报

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