You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript Array every方法箭头函数回调传参显示undefined的原因与解决

问题原因

箭头函数的this是词法作用域绑定的,它的指向在函数定义时就已经确定,永远指向定义它时所在上下文的this,不会被Array.prototype.every()的第二个参数thisArg修改。

你在全局环境下定义箭头函数checkEven,它的this会绑定到全局对象(浏览器中是window,Node.js中是globalThis),如果是严格模式则为undefined,所以你传入的{isEven: true}或{isEven: false}根本不会生效,导致this.isEven始终是undefined,验证逻辑自然失效。

解决方案

如果你想使用箭头函数实现这个验证功能,可以通过闭包传递参数,而不是依赖this:

方法1:工厂函数生成验证器

适合需要复用验证逻辑的场景:

// 工厂函数,根据传入的isEven返回对应的箭头函数验证器
const createNumberChecker = (isEven) => (num) => {
  console.log(isEven, num);
  return num % 2 === (isEven ? 0 : 1);
};

const evenChecker = createNumberChecker(true);
const oddChecker = createNumberChecker(false);

const evenArray = [2, 4, 6, 8];
console.log('All elements are even: ', evenArray.every(evenChecker));

const oddArray = [1, 3, 5, 7];
console.log('All elements are odd: ', oddArray.every(oddChecker));

方法2:直接传入带逻辑的箭头函数

如果不需要复用,直接在every()中写箭头函数更简洁:

const evenArray = [2, 4, 6, 8];
console.log('All elements are even: ', evenArray.every(num => num % 2 === 0));

const oddArray = [1, 3, 5, 7];
console.log('All elements are odd: ', oddArray.every(num => num % 2 === 1));

内容的提问来源于stack exchange,提问作者ArtBindu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 08:43:24