我正在学习 node.js 和 JavaScript。以下是代码。我发现 var http
在函数 start2
之外。我想知道为什么它有效?因为我们只导出函数 start2
,对吧?
这是关于闭包的一些概念吗? (我试过将 var http
放在 start2
中。它确实有效。)
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;
最佳答案
您可以将 var http = require('http');
放在您的函数中,但大多数情况下人们并不是这样编码的。人们将它放在顶部,就像您拥有它一样。为什么?这是对模块系统的调用以加载模块 http
。大多数情况下,您希望一次 并使其可用于整个文件。如果您要在文件中多次使用此模块,您不想一次又一次地调用 require
。
如果一个模块很少被使用并且可能加载起来很昂贵,那么在一个函数中调用 require
可能是有意义的,而不是每次都加载它:
function calledUnderExceptionalCircumstances() {
var expensive = require('expensive');
expensive.foo();
}
关于JavaScript 变量生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20453567/