箭头函数作为forEach回调时的this指向为何不符合预期?
箭头函数回调中this指向的核心原因分析
你的困惑源于对箭头函数this绑定规则的理解偏差,下面拆解清楚:
箭头函数没有独立的this:箭头函数不遵循普通函数的动态this绑定规则,它的this是词法绑定的——直接继承自定义它时所在的外层作用域的this。
在你的代码里,箭头函数定义在printCard函数内部,而printCard通过call(messageConfig)调用,所以printCard内部的this指向messageConfig,箭头函数自然继承这个this,和forEach的调用者(signatories数组)没有关系。为什么你会预期
this是signatories?
普通函数作为forEach回调时,forEach默认会把回调的this绑定到调用它的数组(也就是signatories)——但这是普通函数的动态绑定行为。把箭头函数换成普通函数,就能看到不同结果:const printCard = function () { this.signatories.forEach(function(signatory) { console.log(this); // 非严格模式下是window,严格模式是undefined;给forEach传第二个参数指定this,才会是signatories }); };要是想让普通函数回调的this指向
signatories,可以用forEach的第二个参数显式绑定:this.signatories.forEach(function(signatory) { console.log(this); // 这里会输出signatories数组 }, this.signatories);核心结论:箭头函数的this从定义它的外层作用域“继承”而来,不受调用它的上下文(比如
forEach的执行环境)影响,这就是你联想到的词法作用域在this绑定上的具体表现。
内容的提问来源于stack exchange,提问作者Abdullah Binsaad
相关产品推荐
相关产品推荐

