JavaScript 变量生命周期

标签 javascript node.js

我正在学习 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/

相关文章:

node.js - 如何在nodejs中设置用户代理?

javascript - 测试所有已终止的功能

node.js - 主题不存在错误 : The topic(s) xxx do not exist in kafka-node?

mysql - nodejs mysql多个where查询

javascript - "this"在私有(private)函数内部调用时引用窗口

java - 解析电子邮件地址以获取域并进行比较

没有从外部js文件调用Javascript函数

javascript - A 型框架 : When are all my children fully initialized?

javascript - setTimeout() 不允许我传递文本值

javascript - 如何使用对象 ID 数组创建 Mongoose 模式?