为什么以下JavaScript代码运行后输出结果为30和NaN?
输出结果差异的核心原因是普通函数和箭头函数的
this绑定规则不同 temp.sum()返回30的原因
sum是对象的普通方法(使用方法简写语法定义的普通函数),普通函数的this遵循运行时绑定规则:谁调用这个函数,this就指向谁。你通过temp.sum()调用时,this会绑定到调用方temp对象上,此时this.a取值为temp.a的10,this.b取值为temp.b的20,相加得到30符合预期。
temp.multi()返回NaN的原因
multi是用箭头函数定义的,箭头函数本身没有独立的this绑定,它的this直接继承自定义时所在的外层作用域的this,和调用方无关。你这段代码里multi定义在全局作用域下,外层的this指向全局对象(浏览器环境为window,Node.js环境为globalThis),全局对象上没有定义a和b属性,所以this.a和this.b取值都是undefined,undefined * undefined的运算结果就是NaN。
如果要让multi正常返回计算结果,可以改成普通函数写法:
multi() { return this.a * this.b }
内容的提问来源于stack exchange,提问作者0x192
相关产品推荐
相关产品推荐

