如何使用IIFE.n()更改s变量,因为现在它不起作用。执行IIFE.n()之后,IIFE.s仍返回“字符串”
我已经尝试过了,但是我宁愿使用let / const,也不希望将此变量传递给全局范围,我想将其保留在模块中。
const iife = (() => {
let s = "string";
const n = () => {
s = 1e3;
};
return {
s: s,
n: n
};
})()
当前,当我执行iife.n()时,它不会更改s变量(当我在s = 1e3之前添加return时,它返回1000,但iife.s仍返回“字符串”)
答案 0 :(得分:2)
它确实改变了s
,但是您没有任何方法来获取更新后的值,因此您看不到它在变化。试试看,您将看到更新的s
:
const iife = (() => {
let s = "string";
const n = () => {
s = 1e3;
};
const gets = () => s;
return {
s: s,
n: n,
gets: gets
};
})();
iife.n();
console.log(iife.gets());
iife.s
与s
变量不同。该变量仅用于初始化属性,但并未永久链接。
答案 1 :(得分:1)
您将需要在IIFE.n()函数内部返回对象
const iife = (() => {
let s = "string";
const n = () => {
s = 1e3;
return {
s: s,
n: n
};
};
return {
s: s,
n: n
};
})()
iife.n().s
返回1000
iife.s
返回“字符串”
每次调用iffe时,它都会创建自己的变量副本。在您执行iffe.s
的代码中,它不知道iffe.n()
的先前调用。它将创建该变量的新副本并将其返回。