You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么以下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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:06:07