JS:如何更改函数中的变量(IIFE)

时间:2019-06-08 20:16:48

标签: javascript function return const iife

如何使用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仍返回“字符串”)

2 个答案:

答案 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.ss变量不同。该变量仅用于初始化属性,但并未永久链接。

答案 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()的先前调用。它将创建该变量的新副本并将其返回。