Переменные стека вызовов в javascript

Я где-то читал, что всякий раз, когда вызывается функция, компилятор помещает все видимые переменные в стек, что также связано с закрытием, теперь со следующим кодом. Я не уверен, будет ли он работать в параллельном как node.js.

Product.prototype.list = function(body) {
    body.options = {
        hostname: endPoints.product,
        path: '/applications/' + body.entityType
        method: 'GET'
    };
    return remote.request(body)
        .then(function(result){
            body[body.entityType] = result;
            return body;
        });
};

Теперь, если две следующие функции вызываются одновременно с использованием promises, произойдет ли замыкание? Например,

product.list({entityType: "coke"})
    .then(console.log); //will this have {coke: []} or {pepsi: []}

product.list({entityType: "pepsi"})
    .then(console.log); 

Ответы

Ответ 1

Да, закрытие будет создано анонимной функцией, которую вы передадите на then. Переменная, которая закрывается, представляет собой значение body, передаваемое внешней функции list.

Каждый раз, когда вы вызываете list - в приведенном выше примере вы вызывали его дважды - вы добавляете некоторые значения в объект body, а затем создаете экземпляр нового закрытия и делаете это значение доступным для него. Значения, которые вы передаете каждому вызову list, являются объектными литералами, что означает, что они полностью разделены, и вы будете передавать разные значения для закрытия, поэтому нет никакого способа, чтобы вызов, включающий "кокс", когда-либо имел соединение с вызовом с участием "pepsi".