Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JavaScript variable life time

I am learning node.js and JavaScript. Following is the code. I found the var http is outside the function start2. I am wondering why it works? Since we only exports function start2, right?

Is this some concept about closure? (I've tried put the var http inside the start2. It works for sure.)

var http = require('http');

function start2(){
    function onRequest(request,response){
        console.log("Request recieved");
        response.writeHead(200,{"Content-Type":"text/html"});
        response.write("<h1>Hello world</h1>");
        response.end(); 
    }
    http.createServer(onRequest).listen(8888);
    console.log("Server has started.");
}
exports.start=start2;
like image 756
user2837851 Avatar asked Jul 06 '26 19:07

user2837851


1 Answers

You could put var http = require('http'); inside your function but most often that's not how people code it. People place it at the top like you have it. Why? This is a call to the module system to load module http. Most often, you want to do this once and make it available for your entire file. If you are doing to use this module multiple times in your file you don't want to call require again and again.

If a module it is rarely used and perhaps expensive to load, then it may make sense to have the require call inside a function, instead of paying the cost of loading it each and every time:

function calledUnderExceptionalCircumstances() {
    var expensive = require('expensive');
    expensive.foo();
}
like image 191
Louis Avatar answered Jul 09 '26 12:07

Louis



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!