【问题标题】:JS: How to change variable in function (IIFE)JS:如何更改函数中的变量(IIFE)
【发布时间】:2019-10-23 21:00:49
【问题描述】:

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

【问题讨论】:

  • 我确定它确实改变了s,但是闭包中有s 局部变量和返回对象的属性s。它们是两种不同的东西。
  • const iife = (() => { let s = "string"; const n = function() { this.s = 1e3; }; return { s: s, n: n }; })()

标签: javascript function return constants iife


【解决方案1】:

它确实改变了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 变量不同。该变量仅用于初始化属性,但它们并未永久链接。

【讨论】:

    【解决方案2】:

    您需要在 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() 的调用。它将创建变量的新副本并返回。

    【讨论】:

      猜你喜欢
      • 2015-04-20
      • 1970-01-01
      • 2021-06-29
      • 2020-08-13
      • 2014-09-06
      • 2019-01-24
      • 2019-10-03
      • 2012-04-05
      • 1970-01-01
      相关资源
      最近更新 更多