【Vue】04 模組化開發演變
阿新 • • 發佈:2020-07-24
JS最初的目的是用來做表單驗證和動畫效果,可以讓網頁更加生動。
但是使用Ajax,前後端分離,頁面承擔了更多的事情,JS的程式碼量暴增,程式碼管理維護逐漸困難
我們需要將JS程式碼抽取出來,模組化處理,
但是問題也出現了,各個模組的變數會汙染。
JS檔案a:
flag = true;
JS檔案b:
flag = false;
頁面:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title><script src="js/a.js"></script> <script src="js/b.js"></script> <script type="text/javascript"> if (flag) console.log("flag的值為:" + flag); </script> </head> <body> </body> </html>
效果:
可以發現,flag是false,但是我們希望的是使用A檔案的flag,這就是變數汙染
使用模組作為出口:
A檔案:
moduleA = (function () { return true; })();
B檔案:
moduleB = (function () { return false; })();
頁面使用:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="js/a.js"></script> <script src="js/b.js"></script> <script type="text/javascript"> console.log("flag的值為:",moduleA); </script> </head> <body> </body> </html>
效果:
這樣我就明確知道我需要的是什麼模組的變量了
我們希望引用模組的時候不止一個變數應該被使用:
所以我們可以以一個物件的形式去返回:
moduleB = (function () { let obj = {}; obj.property1 = "sadas"; obj.property2 = true; obj.property3 = ['sdd', 'dsd', 'dsa', 'dsd', 'sds',]; obj.property4 = { prop1 : "sadas" }; obj.property5 = 1000; return obj; })();
效果:
這就是模組化的雛形