Node.js 的模塊作用域和 module 對象詳細介紹

目錄

?

代碼示例

1. 創建模塊文件 module-demo.js

2. 導入模塊并使用 module-demo.js

運行結果

總結


?

在 Node.js 中,每個文件都是一個獨立的模塊,具有自己的作用域。與瀏覽器 JavaScript 代碼不同,Node.js 采用模塊作用域,這意味著一個文件中的變量、函數、類等不會污染全局作用域,而是僅在該模塊內部有效。這種設計提高了代碼的封裝性和安全性。

module 對象 是 Node.js 提供的一個全局對象,專門用于管理模塊的信息和導出功能。module 對象中包含 exports 屬性,它用于導出模塊的內容,以便其他文件可以使用 require() 進行導入。


代碼示例

下面的示例展示了 Node.js 模塊的作用域規則,以及如何使用 module 對象導出和導入數據。

1. 創建模塊文件 module-demo.js

(文件名: module-demo.js,文件類型: JavaScript)

// 定義私有變量和方法(外部無法訪問)
const privateVar = "我是一個私有變量";function privateFunction() {return "我是一個私有函數";
}// 定義可供外部訪問的變量和方法
const publicVar = "我是一個可以被外部訪問的變量";function publicFunction() {return "我是一個可以被外部訪問的函數";
}// 使用 module.exports 導出
module.exports = {publicVar,publicFunction
};

2. 導入模塊并使用 module-demo.js

(文件名: index.js,文件類型: JavaScript)

// 使用 require() 導入自定義模塊
const myModule = require('./module-demo');console.log(myModule.publicVar); // 輸出: 我是一個可以被外部訪問的變量
console.log(myModule.publicFunction()); // 輸出: 我是一個可以被外部訪問的函數// 嘗試訪問私有變量(會報錯)
// console.log(myModule.privateVar); // undefined
// console.log(myModule.privateFunction()); // TypeError: myModule.privateFunction is not a function

運行結果

執行 node index.js 后,終端會輸出以下內容:

我是一個可以被外部訪問的變量
我是一個可以被外部訪問的函數

privateVarprivateFunction() 是無法在外部訪問的,因為它們被定義在模塊內部,未通過 module.exports 進行導出。


總結

  1. 模塊作用域

    • Node.js 中,每個 JavaScript 文件都是一個獨立的模塊,不會污染全局作用域。
    • 模塊內部定義的變量和方法默認是私有的,外部無法直接訪問。
  2. module 對象

    • module.exports 用于導出模塊中的變量、函數或對象,使其可以在其他文件中使用。
    • 只有被 module.exports 導出的內容,才能被 require() 訪問,其他未導出的內容依然保持私有作用域。

掌握模塊作用域和 module 對象的使用方式,對于構建結構清晰、易維護的 Node.js 項目至關重要。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/897962.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897962.shtml
英文地址,請注明出處:http://en.pswp.cn/news/897962.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

美暢物聯丨WebRTC 技術詳解:構建實時通信的數字橋梁

在互聯網技術飛速發展的今天,實時通信已成為數字生活的核心需求。WebRTC作為一個開源項目,憑借卓越的技術實力與創新理念,為網頁和移動應用帶來了顛覆性的實時通信能力。它突破了傳統通信方式的限制,實現了音頻、視頻和數據在用戶…

excel中兩個表格的合并

使用函數: VLOOKUP函數 如果涉及在excel中兩個工作表之間進行配對合并,則: VLOOKUP(C1,工作表名字!A:B,2,0) 參考: excel表格中vlookup函數的使用方法步驟https://haokan.baidu.com/v?pdwisenatural&vid132733503560775…

單引號與雙引號在不同編程語言中的使用與支持

在編程語言中,單引號和雙引號是常見的符號,它們通常用來表示字符和字符串。然而,如何使用這兩種符號在不同的編程語言中有所不同,甚至有一些語言并不區分單引號和雙引號的用途。本文將詳細介紹不同編程語言中單引號與雙引號的支持…

怎么鑒別金媒v10.51和v10.5的區別!單單從CRM上區分!

2.怎么鑒別程序是10.5還是10.51 ?* 作為商業用戶,升級完全沒有這個擔心,但是這次升級從全局來看清晰度不是很高,不像10.5的升級后臺UI都變化了!你說有漏洞但是我沒遇到過 所以我也不知道升級了啥只能看版本數字是無法區…

python腳本實現服務器內存和cpu使用監控,并記錄日志,可以設置閾值和采樣頻率

Python 腳本,實現以下功能: 按日期自動生成日志文件(例如 cpu_mem_20231001.csv)當 CPU 或內存超過閾值時觸發記錄獨立記錄報警事件(保存到 alert.log)支持自定義閾值和監控間隔 腳本代碼 import psutil …

【Oracle】19c數據庫控制文件多路徑配置

一、關閉數據庫(2個節點實例都要關閉) srvctl stop database -d ora19c 二、多路徑控制文件 打開其中一個節點到nomount狀態 sqlplus / as sysdba startup nomount; [oracleora19c1:/home/oracle]$ rman target / RMAN> restore controlfile to…

大模型訓練全流程深度解析

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站。https://www.captainbed.cn/north 文章目錄 1. 大模型訓練概覽1.1 訓練流程總覽1.2 關鍵技術指標 2. 數據準備2.1 數據收集與清洗2.2 數據…

【Linux】進程(1)進程概念和進程狀態

🌟🌟作者主頁:ephemerals__ 🌟🌟所屬專欄:Linux 目錄 前言 一、什么是進程 二、task_struct的內容 三、Linux下進程基本操作 四、父進程和子進程 1. 用fork函數創建子進程 五、進程狀態 1. 三種重…

lws-minimal-ws-server前端分析

index.html index.html是前端入口 <html><head><meta charsetutf-8 http-equiv"Content-Language" content"en"/><!-- 引入js --><script src"/example.js"></script></head><body><img s…

L1-7 統一命名規范(java)

你所在的公司剛剛招收了幾位程序員&#xff0c;然而這些程序員之前在不同的公司工作&#xff0c;所以他們習慣的變量命名規范可能存在差異&#xff0c;需要讓他們都習慣公司要求的命名規范&#xff0c;然而這樣可能會降低他們的工作效率。 你的上司找到了你&#xff0c;希望你…

Flexus應用服務器L實例、X實例以及ECS(彈性計算服務)之間的區別及其適用場景

為了更好地理解Flexus應用服務器L實例、X實例以及ECS&#xff08;彈性計算服務&#xff09;之間的區別及其適用場景&#xff0c;下面我將通過具體的例子來說明每種類型的使用情況。 1. Flexus L實例 特點: 針對高并發和負載均衡進行了優化。它可能包括更快的網絡接口、更高效…

WebRTC中音視頻服務質量QoS之RTT衡量網絡往返時延的加權平均RTT計算機制?詳解

WebRTC中音視頻服務質量QoS之RTT衡量網絡往返時延加權平均RTT計算機制?的詳解 WebRTC中音視頻服務質量QoS之RTT衡量網絡往返時延加權平均RTT計算機制?的詳解 WebRTC中音視頻服務質量QoS之RTT衡量網絡往返時延加權平均RTT計算機制?的詳解前言一、 RTT 網絡往返時延的原理?1、…

odbus TCP轉Modbus RTU網關快速配置案例

Modbus TCP 轉Modbus RTU網關快速配置案例 在工業自動化領域&#xff0c;Modbus 協議以其簡潔和高效而著稱&#xff0c;成為眾多設備通信的首選。 隨著技術的發展和應用場景的變化&#xff0c;Modbus 協議也發展出了不同的版本&#xff0c;其中 Modbus TCP 和 Modbus RTU 是兩種…

《高效遷移學習:Keras與EfficientNet花卉分類項目全解析》

從零到精通的遷移學習實戰指南&#xff1a;以Keras和EfficientNet為例 一、為什么我們需要遷移學習&#xff1f; 1.1 人類的學習智慧 想象一下&#xff1a;如果一個已經會彈鋼琴的人學習吉他&#xff0c;會比完全不懂音樂的人快得多。因為TA已經掌握了樂理知識、節奏感和手指…

WSL2 Ubuntu安裝GCC不同版本

WSL2 Ubuntu安裝GCC不同版本 介紹安裝gcc 7.1方法 1&#xff1a;通過源碼編譯安裝 GCC 7.1步驟 1&#xff1a;安裝編譯依賴步驟 2&#xff1a;下載 GCC 7.1 源碼步驟 3&#xff1a;配置和編譯步驟 4&#xff1a;配置環境變量步驟 5&#xff1a;驗證安裝 方法 2&#xff1a;通過…

淘寶API vs 爬蟲:合規獲取實時商品數據的成本與效率對比

以下是淘寶 API 和爬蟲在合規獲取實時商品數據方面的成本與效率對比&#xff1a; 成本對比 淘寶 API 開發成本&#xff1a;需要申請開發者賬號并獲取 API 權限&#xff0c;部分敏感或高頻訪問的接口可能需要額外的審核或付費。開發過程中需要按照平臺規定進行編程&#xff0c;相…

Android 手機啟動過程

梳理 為了梳理思路&#xff0c;筆者畫了一幅關于 Android 手機啟動的過程圖片內容純屬個人見解&#xff0c;如有錯誤&#xff0c;歡迎各位指正

【Linux】:封裝線程

朋友們、伙計們&#xff0c;我們又見面了&#xff0c;本期來給大家帶來封裝線程相關的知識點&#xff0c;如果看完之后對你有一定的啟發&#xff0c;那么請留下你的三連&#xff0c;祝大家心想事成&#xff01; C 語 言 專 欄&#xff1a;C語言&#xff1a;從入門到精通 數據結…

正則表達式全解析 + Java常用示例

目錄 一、正則表達式基礎&#xff08;一&#xff09;元字符&#xff08;二&#xff09;字符集&#xff08;三&#xff09;量詞 二、正則表達式常用示例&#xff08;一&#xff09;驗證郵箱格式&#xff08;二&#xff09;驗證電話號碼格式&#xff08;三&#xff09;提取網頁中…

LoRa數傳、點對點通信、Mesh網絡、ZigBee以及圖傳技術的區別和特點

以下是LoRa數傳、點對點通信、Mesh網絡、ZigBee以及圖傳技術的區別和特點&#xff1a; 1.LoRa數傳? 特點&#xff1a;LoRa是一種基于擴頻技術的低功耗廣域網&#xff08;LPWAN&#xff09;通信技術&#xff0c;具有傳輸距離遠&#xff08;城市環境可達2-5公里&#xff0c;鄉村…