2016-07-02 46 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; 
     }); 
}; 

现在如果使用promises同时调用以下两个函数,会发生闭包吗?例如

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的每个呼叫的值都是对象文字,这意味着它们完全分开,并且您将向闭包传递不同的值,因此,涉及“可乐”的呼叫将无法连接到涉及'百事可乐'的电话。

+0

关于创建闭包时间的更多信息,是在函数list被调用时还是在调用了.then时创建的闭包? – user2727195

+0

@ user2727195 - 在调用list()函数时创建闭包,因为自由变量'body'被传入,定义并记住在该范围内,这也在'remote.request()然后(......因为它是词汇的功能。 – adeneo