关于JavaScript arr.every()方法第二个参数thisArg的技术咨询
关于JavaScript Array.every()中thisArg参数的访问问题
嘿,很高兴你注意到了every()方法里的这个可选参数!我来帮你把关于thisArg的访问问题说清楚。
首先,先把你查到的文档描述放在这里:
执行回调函数时用作this的值。如果向every()传入thisArg参数,它将被用作回调函数的this值;否则,this值为undefined。回调函数最终可观察到的this值,由确定函数this指向的常规规则决定。
接下来分情况说明你关心的访问问题:
- 普通函数回调:可以正常访问
当你给every()传入thisArg参数,并且回调是普通函数时,回调里的this就会指向这个thisArg,直接用this就能访问到它的属性或值。举个实际的例子:const checkObj = { minValue: 5 }; const nums = [6, 8, 3]; const allMeetRequirement = nums.every(function(num) { return num >= this.minValue; // 这里的this就是checkObj }, checkObj); console.log(allMeetRequirement); // false,因为3小于5 - 箭头函数回调:无法通过this访问
箭头函数不会绑定自己的this,它会继承外层作用域的this值。所以哪怕你给every()传了thisArg,箭头函数回调里的this也不会指向它,而是沿用外层的this。比如:const checkObj = { minValue: 5 }; const nums = [6, 8, 3]; const allMeetRequirement = nums.every((num) => { // 这里的this是外层作用域的this,不是checkObj return num >= this.minValue; }, checkObj); - 未传入thisArg时的情况
如果没传thisArg,普通函数回调在严格模式下this是undefined,非严格模式下会指向全局对象(浏览器里是window,Node.js里是globalThis);箭头函数则依然继承外层作用域的this。
总的来说,能不能通过this访问到thisArg,核心在于你用的回调函数类型——普通函数可以正常获取,箭头函数则不行。
内容的提问来源于stack exchange,提问作者dhunmoon
相关产品推荐
相关产品推荐

