Call stack variables in javascript

牧云@^-^@ 提交于 2019-12-13 08:46:07

问题


I read somewhere that whenever a function gets called, the compiler puts all the visible variables on a stack, somewhat related to closures as well, now with the following code I'm not really sure if it'd work in a concurrent environment like 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;
        });
};

Now if the following two function gets called concurrently using promises, will a closure occur? For instance

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

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

回答1:


Yes a closure will be created by the anonymous function you pass to then. The variable which is being closed over is the body value being passed in to the outer list function.

Each time you call list - in the above example you've called it twice - you are adding some values to the body object and then instantiating a new closure and making that value available for it. The values that you're passing to each call of list are both object literals which means they're completely separate and you will be handing different values to the closure so there is no way the call involving 'coke' will ever have a connection to the call involving 'pepsi'.



来源:https://stackoverflow.com/questions/38165081/call-stack-variables-in-javascript

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!