Heim > Fragen und Antworten > Hauptteil
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?
Zitiert von:
https://github.com/ElemeFE/no...
高洛峰2017-05-16 13:47:41
谁说 Node 没给每个 js 文件独立的上下文了……Node 的每个 .js 作为一个模块,实际都是用一个函数封装起来的,具体参考 你需要了解的 Node.js 模块
补充:我把你的问题理解错了。全局变量的意义就在于“全局”,Node 有这个,C/C++ 也有,即使 Java、C# 也可以通过静态成员来实现“全局”。全局本身不是问题,问题是你真的需要全局吗?
PHP中文网2017-05-16 13:47:41
每个js
文件有独立的module
,仔细看过node
官网的module
部分就能知道,每个模块也就是文件都有自己的全局变量module
,从而能通过module.exports
进行模块导出,每个文件的内容都存在一个闭包中,所以说,所谓的单独上下文其实是有的,看你怎么定义这个单独上下文,如果没有的话,CommonJS
的module
机制就不存在了。
世界只因有你2017-05-16 13:47:41
问题其实有点下套,其实Node有给每个js文件独立的上下文,但是这避免不了全局的作用域污染,实际上这是为了功能的妥协。
当然,可以用上严格模式来避免一时的粗心导致的全局污染。
PHP中文网2017-05-16 13:47:41
完了 看来 这个问题没人回答啊 自己顶一下
在知乎上找到了一个差不多能回答这个问题的答案,感觉差不多
https://www.zhihu.com/questio...