Неожиданный вывод из функции с использованием замыкания в Javascript - PullRequest
0 голосов
/ 13 октября 2019

const run = initialize;
run(1);
run(1);
run(1);
function initialize(index) {
    console.log('runs only once');
    return function(index) {
        console.log('useless code to use closure to make sure initialize only runs once');
        return index;
    }
}

Это не работает, но я не совсем уверен, почему, потому что приведенный ниже код работает так, как задумано, и выполняет код внутри внешней функции только один раз при выполнении внутреннейфункционировать несколько раз.

const getIndex = bigStuff();
getIndex(500);
getIndex(600);
getIndex(700);
function bigStuff(index) {
    const myArray = new Array(300).fill('3');
    console.log('created once');
    return function(index) {
        console.log('calling several times');
        return myArray[index];
    }
}

Второй фрагмент кода возвращает:

created once
calling several times
calling several times 
calling several times 

Пока возвращается первый фрагмент кода:

runs only once
runs only once
runs only once

Может кто-тообъясните мне, что движок Javascript делает в фоновом режиме? Потому что я чувствую, что результат будет отличаться в зависимости от того, что внутри внутренней и внешней функций, когда вы используете замыкания.

1 Ответ

1 голос
/ 13 октября 2019

const run = initialize()

run(1); 

run(1); 

run(1); 

function initialize(index) {


    console.log('runs only once');

    return function(index) { 

        console.log('useless code to use closure to make sure initialize only runs once');

        return index;

    } 

}

При изменении первой строки для фактического вызова initialize и возврата функции, вышеприведенное работает как ожидалось

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...