2016-07-02 4 views
0

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

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; 
     }); 
}; 

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

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

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

Я думаю, это зависит от того, что такое 'продукт'? – adeneo

ответ

1

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

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

+0

для получения дополнительной информации о времени закрытия, заключается в том, что замыкание создается при вызове функции 'list' или когда'. Then' вызывается? – user2727195

+0

@ user2727195 - Закрытие создается, когда вызывается функция 'list()', поскольку свободная переменная 'body' передается, определяется и запоминается в этой области, которая также доступна в' remote.request() .then (... "функция, потому что она лексическая. – adeneo

Смежные вопросы