forEach 的第二个参数 thisArg 用于指定回调函数中的 this 值;若省略且回调为普通函数,非严格模式下 this 指向全局对象,严格模式下为 undefined;箭头函数不适用 thisArg。

在 forEach 中,第二个参数就是用来指定回调函数内部 this 值的。
语法结构
array.forEach(callback, thisArg)
其中:
- callback 是每次迭代执行的函数;
- thisArg(可选)是执行 callback 时用作 this 的值。
实际用法示例
比如你有一个对象,想在 forEach 里访问它的属性:
const obj = {
prefix: 'Item',
items: []
};
<p>[1, 2, 3].forEach(function (val) {
this.items.push(<code>${this.prefix}-${val}</code>);
}, obj); // 这里传入 obj 作为 thisArg</p><p>console.log(obj.items); // ['Item-1', 'Item-2', 'Item-3']
注意事项
- 如果省略
thisArg,且回调是普通函数(非箭头函数),this在非严格模式下指向全局对象(如window),严格模式下为undefined - 箭头函数不绑定自己的
this,它会沿作用域链向上找,所以thisArg对箭头函数无效 - 若回调中用了
bind、call或apply显式绑定this,则thisArg会被忽略
替代写法对比
不用 thisArg,也可用以下方式达到类似效果:
立即学习“Java免费学习笔记(深入)”;
- 用箭头函数捕获外层
this(适合类方法或对象字面量中) - 提前用
bind绑定回调:arr.forEach(callback.bind(obj)) - 把数据挂到回调函数上(如
callback.obj = obj),但不够优雅


















