亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術文章
文章詳情頁

javascript - 為什么 Node.js 不給每一個.js文件以獨立的上下文來避免作用域被污染?

瀏覽:166日期:2023-09-11 10:01:11

問題描述

在cnode論壇看到這樣一個問題:

目前的 Node.js 將 VM 的接口暴露了出來, 可以讓你自己創建一個新的 js 上下文, 這一點上跟前端 js 還是區別挺大的. 在執行外部代碼的時候, 通過創建新的上下文沙盒 (sandbox) 可以避免上下文被污染:

’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 Worldn’); }).listen(8124); console.log(’Server running at http://127.0.0.1:8124/’);})`;vm.runInThisContext(code)(require);

既然可以通過新的上下文來避免污染, 那么為什么 Node.js 不給每一個.js文件以獨立的上下文來避免作用域被污染?

實在是在下學藝不精首先就沒弄明白他問的啥,其次是這個問題怎么解決;萬望大家不吝賜教,感激不盡,跪謝

引用自:https://github.com/ElemeFE/no...

問題解答

回答1:

誰說 Node 沒給每個 js 文件獨立的上下文了……Node 的每個 .js 作為一個模塊,實際都是用一個函數封裝起來的,具體參考 你需要了解的 Node.js 模塊

補充:我把你的問題理解錯了。全局變量的意義就在于“全局”,Node 有這個,C/C++ 也有,即使 Java、C# 也可以通過靜態成員來實現“全局”。全局本身不是問題,問題是你真的需要全局嗎?

回答2:

每個js文件有獨立的module,仔細看過node官網的module部分就能知道,每個模塊也就是文件都有自己的全局變量module,從而能通過module.exports進行模塊導出,每個文件的內容都存在一個閉包中,所以說,所謂的單獨上下文其實是有的,看你怎么定義這個單獨上下文,如果沒有的話,CommonJS的module機制就不存在了。

回答3:

問題其實有點下套,其實Node有給每個js文件獨立的上下文,但是這避免不了全局的作用域污染,實際上這是為了功能的妥協。

當然,可以用上嚴格模式來避免一時的粗心導致的全局污染。

回答4:

完了 看來 這個問題沒人回答啊 自己頂一下

在知乎上找到了一個差不多能回答這個問題的答案,感覺差不多

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

回答5:

module 不就是上下本?

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 日韩一级片 韩国 | 国内成人精品亚洲日本语音 | 亚洲综合天堂 | 俄罗斯一级成人毛片 | 女人张腿让男桶免费视频网站 | 国产偷国产偷亚洲高清午夜 | 国产男女爽爽爽爽爽免费视频 | 欧美日韩一区二区在线观看 | 欧美成人免费观看久久 | 午夜精 | 国产欧美日韩精品第二区 | 亚洲人成网国产最新在线 | 玖玖在线国产精品 | 国产极品精频在线观看 | 综合亚洲欧美日韩一区二区 | 一个人看的www日本高清视频 | 国产欧美日韩在线不卡第一页 | 国产亚洲精品一区999 | 一区二区三区视频网站 | 操欧美女| 欧美另类极品 | 午夜视频网站 | 欧美日韩在线播一区二区三区 | 在线观看二区三区午夜 | 免费日韩一级片 | 亚洲欧美在线观看播放 | 国产一级毛片大陆 | 欧美一级毛片一级毛片 | 国产91香蕉视频 | 中文字幕亚洲另类天堂 | 国产一区亚洲二区三区 | 天堂av影院| 国产玖玖在线 | 在线日本看片免费人成视久网 | 欧美一级片免费观看 | 亚欧成人毛片一区二区三区四区 | 午夜丝袜美腿福利视频在线看 | 一区二区3区免费视频 | 99视频在线观看免费视频 | 一级国产a级a毛片无卡 | 日韩欧美一区二区精品久久 |