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

JavaScript立即执行函数表达式中this指向问题:两段代码为何结果不同?

两段代码执行结果差异的原因

第一段代码能正确返回1的逻辑

第一段代码里,立即执行函数内部用let test = 1声明了一个局部变量,内部函数getTest借助闭包特性,始终能访问到这个外部作用域的test变量。不管后续getTest以何种方式被调用,它都能读取到最初的test值1,所以test.getTest()会返回预期结果。

第二段代码失效的核心原因

第二段代码的问题出在this的指向逻辑上:

  1. 立即执行函数是普通函数调用模式,此时函数内部的this默认绑定全局对象(浏览器环境为window,Node.js环境为global),所以this.test = 1其实是给全局对象添加了test属性,和最终返回的对象毫无关联。
  2. 当调用test.getTest()时,getTest作为返回对象的方法被调用,此时它内部的this指向的是test这个对象,但该对象并没有test属性,因此返回undefined,达不到预期效果。

如果要修正第二段代码,可以用以下几种方式:

  • 把getTest改成箭头函数:箭头函数的this继承自外层作用域,能拿到立即执行函数里的this
  • 提前缓存this:在立即执行函数里声明const self = this,getTest里返回self.test
  • 用bind绑定this:返回{ getTest: getTest.bind(this) }

内容的提问来源于stack exchange,提问作者Vivek Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:45:37