简体   繁体   中英

Call stack variables in javascript

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

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'.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM