suchen

Heim  >  Fragen und Antworten  >  Hauptteil

javascript - Warum gibt Node.js nicht jeder .js-Datei einen separaten Kontext, um eine Bereichsverschmutzung zu vermeiden?

Ich habe diese Frage im Cnode-Forum gesehen:

Das aktuelle Node.js macht die VM-Schnittstelle verfügbar, sodass Sie selbst einen neuen JS-Kontext erstellen können, der sich deutlich von Front-End-JS unterscheidet. Durch die Erstellung eines neuen Kontexts kann die Sandbox eine Kontextverschmutzung vermeiden:

'use strict';
const vm = require('vm');

let code =
`(function(require) {

  const http = require('http');

  http.createServer( (request, response) => {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('Hello World\n');
  }).listen(8124);

  console.log('Server running at http://127.0.0.1:8124/');
})`;

vm.runInThisContext(code)(require);

Da Sie eine Verschmutzung durch einen neuen Kontext vermeiden können, warum gibt Node.js nicht jeder .js-Datei einen unabhängigen Kontext, um eine Bereichsverschmutzung zu vermeiden?

Ich bin wirklich nicht gut im Lernen, und zweitens, wie ich dieses Problem lösen kann, bin ich dankbar meine Knie

Zitiert von:
https://github.com/ElemeFE/no...

PHP中文网PHP中文网2748 Tage vor1616

Antworte allen(5)Ich werde antworten

  • 高洛峰

    高洛峰2017-05-16 13:47:41

    谁说 Node 没给每个 js 文件独立的上下文了……Node 的每个 .js 作为一个模块,实际都是用一个函数封装起来的,具体参考 你需要了解的 Node.js 模块

    补充:我把你的问题理解错了。全局变量的意义就在于“全局”,Node 有这个,C/C++ 也有,即使 Java、C# 也可以通过静态成员来实现“全局”。全局本身不是问题,问题是你真的需要全局吗?

    Antwort
    0
  • PHP中文网

    PHP中文网2017-05-16 13:47:41

    每个js文件有独立的module,仔细看过node官网的module部分就能知道,每个模块也就是文件都有自己的全局变量module,从而能通过module.exports进行模块导出,每个文件的内容都存在一个闭包中,所以说,所谓的单独上下文其实是有的,看你怎么定义这个单独上下文,如果没有的话,CommonJSmodule机制就不存在了。

    Antwort
    0
  • 世界只因有你

    世界只因有你2017-05-16 13:47:41

    问题其实有点下套,其实Node有给每个js文件独立的上下文,但是这避免不了全局的作用域污染,实际上这是为了功能的妥协。

    当然,可以用上严格模式来避免一时的粗心导致的全局污染。

    Antwort
    0
  • PHP中文网

    PHP中文网2017-05-16 13:47:41

    完了 看来 这个问题没人回答啊 自己顶一下

    在知乎上找到了一个差不多能回答这个问题的答案,感觉差不多

    https://www.zhihu.com/questio...

    Antwort
    0
  • 怪我咯

    怪我咯2017-05-16 13:47:41

    module 不就是上下本?

    Antwort
    0
  • StornierenAntwort