Создают ли реализации JavaScript новый стековый фрейм для областей уровня блока? - PullRequest
0 голосов
/ 20 сентября 2018

Мне любопытно, создают ли движки JavaScript новый фрейм стека, особенно когда задействованы замыкания.

Кажется, что это, как правило, было бы излишним, так как случай использования, где это кажется полезным (чрезвычайно большие функциис большим количеством объявлений переменных уровня блока), как правило, в любом случае не считается наилучшей практикой.

Ниже приведен пример, который, я надеюсь, хорошо иллюстрирует мой вопрос.

function getTalkingButton(type) {
    if (type === 1) {
        // block scope, new stack-frame?
        let name = "Thundercat";
        return function() {
            console.log(name);
        };
    }
    else {
        // block scope, new stack-frame?
        let warcry = "Hooooooooo!";
        return function() {
            console.log(warcry);
        }
    }
}

getTalkingButton(1)(); // Thundercat
getTalkingButton(2)(); // Hooooooooo!

Еслисфера действия этого вопроса слишком велика, я просто хотел бы добавить, что мне больше всего интересно узнать о «более крупных» игроках, таких как V8 (Chrome, Node.js) или SpiderMonkey (Firefox).

...