如何通过IIFE的n()方法修改内部s变量?当前修改操作无效
问题分析与解决方案
嘿,我明白你的问题了——你现在遇到的是值类型赋值的常见陷阱,咱们一步步来拆解和解决:
为什么原来的代码无效?
当你在IIFE的return语句里写s: s时,你其实是把内部变量s当时的字符串值("string")复制了一份,赋值给了返回对象的s属性。这两个s从此就完全独立了:内部的s被n()修改成1000,但返回对象的s属性还是保留着最初的字符串副本,自然不会同步更新。
解决方案:用Getter实现属性同步
这是最贴合你需求的方式——既不用把变量暴露到全局,又能通过iife.s访问到内部s的最新值,同时还能继续使用let/const保持变量私有。修改后的代码如下:
const iife = (() => { let s = "string"; const n = () => { s = 1e3; }; return { // 用getter代替直接赋值,每次访问iife.s都会获取最新的内部s值 get s() { return s; }, n: n }; })();
测试一下:
- 初始状态下,
iife.s返回"string" - 调用
iife.n()后,iife.s就会返回1000了
备选方案:用函数获取最新值
如果你不介意通过函数调用的方式获取s,也可以返回一个专门的获取函数,代码更简洁:
const iife = (() => { let s = "string"; const n = () => { s = 1e3; }; const getS = () => s; return { getS, n }; })();
使用时通过iife.getS()就能拿到内部s的最新值。
内容的提问来源于stack exchange,提问作者Marcinek
相关产品推荐
相关产品推荐

