javascript - Warum gibt Node.js nicht jeder .js-Datei einen separaten Kontext, um eine Bereichsverschmutzung zu vermeiden?
PHP中文网
PHP中文网 2017-05-16 13:45:41
0
5
1570

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中文网

认证高级PHP讲师

Antworte allen(5)
小葫芦

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

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

Ty80

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

世界只因有你

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

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

Ty80

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

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

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

刘奇

module 不就是上下本?

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!