125. 驗證迴文串
阿新 • • 發佈:2021-10-14
什麼是模組?
當一個js檔案可以獨立完成一個功能的時候,這個js檔案就是一個模組;
當一個多個.js檔案共同完成一個功能的時候,這個些js檔案就是一個模組。
模組就是module(模組的意思)
HTML的多檔案引用
HTML的宿主環境中,多一個js檔案公用一個html宿主,此時它們的作用域是公用的
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <script src="./1.js"></script> //var a=1 <script src="./2.js"></script> //console.log(a) </body> </html>
,
此時檢視控制檯輸出1,因為此時01.js檔案中的a是全域性變數也就是window的屬性,所以02.js是可以使用window.a的也就是1
Node.js的多檔案引用
┣ app.js
┣ 01.js
//app.js檔案 require("./1.js"); console.log("app.js檔案") //1.js檔案 console.log("我是1.js檔案")
此時node app.js可以看到
在Node.js中require()引用檔案在引用的同時也在執行,所以就能過輸入兩個檔案的內容
Node.js中的js檔案作用域天生隔離
//1.js var a = 1; //app.js require("./1.js") console.log(a)
此時node app.js檔案會報錯
js檔案在NodeJS中作用域隔離,因為NodeJS沒有window物件,所以此時會報錯
此時我們想讓檔案之間能夠相互通訊,需要讓檔案自己暴露
exports命令
//1.js var a = 1; // 向外暴露a引數 exports.a = a; //app.js var a = require("./1.js") // 輸入a檔案的a引數 console.log(a.a)
此時在node app.js檔案,
注意:
- 暴露的時候必須是exports.** = **,此時**必須是統一的,必要有差異化
- 接收檔案的時候,檔名是什麼就用什麼命名
exports的名稱空間
┣ app.js
┣ 01.js
//1.js var a = 1; // 向外暴露a引數 exports.a = a; //app.js var a = require("./1.js") // 輸入a檔案的a引數 console.log(a.a)
我們在輸出1.js檔案的a值的時候使用的是a.a,這個a就是exports返回的一個物件
這樣做的好處是什麼?這種寫法天生有自己的名稱空間
┣ app.js
┣ round.js
┣ rectangle.js
我們在新建兩個檔案
//round.js function area(r){ return 3.14 * r * r } exports.area = area; //rectangle.js function area(a,b){ return a * b; } exports.area = area;varround=require("./round"); varrectangle=require("./rectangle");
//app.js
console.log(round.area(5)); console.log(rectangle.area(5,6));
exports是可以暴露多個引數的
比如round.js
function area(r){ return 3.14 * r * r } function perimeter(r) { return 3.14 * 2 * r; } exports.area = area; exports.perimeter = perimeter;