首页 > 解决方案 > TypeError: fns[(x * 2)] 不是函数

问题描述

所以我有一个作业问题需要解决。要求只是修复代码,以便控制台显示为真

 var x = 2,
 fns = [];

(function () {
  var x = 5;

  for (var i = 0; i < x; i++) {
  //  write here 
  }
})();

// DO NOT MODIFY BELOW CODE
console.log(x * 2===fns[x * 2]());
// console must show true

控制台输出是

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

我尝试将函数重写为数组中的元素之一,但控制台仍然显示错误。我重写了fns[x * 2]()tofns[x * 2]并且控制台显示返回 false (这很好,因为至少它不会抛出错误)但不能根据要求修改它

标签: javascript

解决方案


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

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

确保用let,而不是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


推荐阅读