Saya melihat soalan ini dalam forum cnode:
.Node.js semasa mendedahkan antara muka VM, membolehkan anda membuat sendiri konteks js baharu, yang agak berbeza daripada js bahagian hadapan Apabila melaksanakan kod luaran, dengan mencipta konteks baharu Kotak pasir boleh mengelakkan pencemaran konteks:
'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);
Memandangkan anda boleh mengelakkan pencemaran melalui konteks baharu, mengapa Node.js tidak memberikan setiap fail .js konteks bebas untuk mengelakkan pencemaran skop?
Dipetik daripada:
https://github.com/ElemeFE/no...
Siapa kata Node tidak memberikan setiap fail js konteks bebas... Setiap fail .js dalam Node, sebagai modul, sebenarnya dirangkumkan dengan fungsi untuk mendapatkan butiran, sila rujuk modul Node.js yang perlu anda ketahui
Tambahan: Saya salah faham soalan anda. Maksud pembolehubah global ialah "global". Gambaran besar itu sendiri bukanlah masalah, persoalannya adakah anda benar-benar memerlukan gambaran besar?
Setiap
js
文件有独立的module
,仔细看过node
官网的module
部分就能知道,每个模块也就是文件都有自己的全局变量module
,从而能通过module.exports
进行模块导出,每个文件的内容都存在一个闭包中,所以说,所谓的单独上下文其实是有的,看你怎么定义这个单独上下文,如果没有的话,CommonJS
的module
mekanisme tidak lagi wujud.Masalahnya sebenarnya agak mengelirukan. Sebenarnya, Node memberikan setiap fail js konteks bebas, tetapi ini tidak dapat mengelakkan pencemaran skop global, sebenarnya, ini adalah kompromi untuk kefungsian.
Sudah tentu, mod ketat boleh digunakan untuk mengelakkan pencemaran global yang disebabkan oleh kecuaian sementara.
Sudah selesai Nampaknya belum ada yang menjawab soalan ini
Saya temui jawapan pada Zhihu yang hampir boleh menjawab soalan ini Rasanya hampir samaBukankah modul hanya versi atas dan bawah?