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
相关产品推荐
相关产品推荐

