JS: Как изменить переменную в функции (IIFE) - PullRequest
3 голосов
/ 08 июня 2019

Как изменить переменную s, используя IIFE.n (), потому что теперь она не работает. После выполнения IIFE.n () IIFE.s по-прежнему возвращает «строку»

Я пробовал с этим, но я скорее использую let / const и не хочу передавать эту переменную в глобальную область, я хочу сохранить ее в модуле.

const iife = (() => {
    let s = "string";
    const n = () => {
        s = 1e3;
    };
    return {
        s: s,
        n: n
    };
})()

В настоящее время, когда я делаю iife.n (), он не меняет переменную s (когда я добавил return до s = 1e3, он возвращает 1000, но iife.s по-прежнему возвращает «строку»)

Ответы [ 2 ]

2 голосов
/ 08 июня 2019

Это действительно меняет 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 голос
/ 08 июня 2019

Вам нужно будет вернуть объект внутри функции 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(). Он создаст новую копию переменной и вернет ее.

...