摘要:一一開(kāi)始是垃圾,但隨著時(shí)代的發(fā)展業(yè)務(wù)的進(jìn)步,變得越來(lái)越重要,但涉及之初就是用來(lái)打雜的,有缺陷如下簡(jiǎn)單翻譯下沒(méi)有模塊系統(tǒng)沒(méi)有標(biāo)準(zhǔn)庫(kù)沒(méi)有文件沒(méi)有系統(tǒng)沒(méi)有標(biāo)準(zhǔn)接口,用來(lái)做服務(wù)器或者數(shù)據(jù)庫(kù)沒(méi)有依賴包管理系統(tǒng)。
一 Commonjs
一開(kāi)始js是垃圾,但隨著時(shí)代的發(fā)展、業(yè)務(wù)的進(jìn)步,js變得越來(lái)越重要,但js涉及之初就是用來(lái)打雜的,有缺陷如下:
JavaScript has no module system. To compose JavaScript scripts, they must be either managed in HTML, concatenated, injected, or manually fetched and evaluated. There is no native facility for scope isolation or dependency management.
JavaScript has no standard library. It has a browser API, dates, and math, but no file system API, much less an IO stream API or primordial types for binary data.
JavaScript has no standard interfaces for things like Web servers or databases.
JavaScript has no package management system that manages dependencies and automatically installs them, except JSAN (not to be confused with JSON), which falls short for scope isolation.
簡(jiǎn)單翻譯下:
沒(méi)有模塊系統(tǒng)
沒(méi)有標(biāo)準(zhǔn)庫(kù)、沒(méi)有文件、沒(méi)有IO系統(tǒng)
沒(méi)有標(biāo)準(zhǔn)接口,用來(lái)做服務(wù)器、或者數(shù)據(jù)庫(kù)
沒(méi)有依賴包管理系統(tǒng)。
所以mozila的工程師希望來(lái)解決這個(gè)問(wèn)題
“What I’m describing here is not a technical problem. It’s a matter of people getting together and making a decision to step forward and start building up something bigger and cooler together.”
這并不是一個(gè)技術(shù)問(wèn)題,而是為了便于更多人合作...
所以就有了commonjs,定義了這些概念,而nodejs實(shí)現(xiàn)了這個(gè)標(biāo)準(zhǔn)。
CommonJS定義的模塊分為:{模塊引用(require)} {模塊定義(exports)} {模塊標(biāo)識(shí)(module)}
比如這個(gè)樣子:
// foo.js module.exports = function(x) { console.log(x); }; // main.js var foo = require("./foo"); foo("Hi");
看似完美的解決了模塊問(wèn)題,但在瀏覽器模式下是不行的,假設(shè)我們有如下這段代碼
var math = require("math"); math.add(2, 3);
問(wèn)題1:math.add會(huì)被阻塞掉,必須在require完成之后再執(zhí)行
問(wèn)題2:即使能夠異步加載,但你如何能夠知道什么時(shí)候加載完畢,什么時(shí)候能夠執(zhí)行完么?
(Asynchronous Module Definition) 異步模塊加載
這里不得不說(shuō)到我們的requirejs,它有兩個(gè)參數(shù)
require([module], callback);
第一個(gè)表示依賴的模塊,第二個(gè)就是具體的回掉了,比如上上述的代碼
require(["math"], function (math) { math.add(2, 3); });三 ES6
ES6中的模塊最大的特點(diǎn)就是靜態(tài),即在編譯時(shí)就確定依賴關(guān)系,ES6中會(huì)自然采用嚴(yán)格模式:
變量必須聲明后再使用
函數(shù)的參數(shù)不能有同名屬性,否則報(bào)錯(cuò)
不能使用with語(yǔ)句
不能對(duì)只讀屬性賦值,否則報(bào)錯(cuò)
不能使用前綴0表示八進(jìn)制數(shù),否則報(bào)錯(cuò)
不能刪除不可刪除的屬性,否則報(bào)錯(cuò)
不能刪除變量delete prop,會(huì)報(bào)錯(cuò),只能刪除屬性delete global[prop]
eval不會(huì)在它的外層作用域引入變量
eval和arguments不能被重新賦值
arguments不會(huì)自動(dòng)反映函數(shù)參數(shù)的變化
不能使用arguments.callee
不能使用arguments.caller
禁止this指向全局對(duì)象
不能使用fn.caller和fn.arguments獲取函數(shù)調(diào)用的堆棧
增加了保留字(比如protected、static和interface)
參考:http://www.cnblogs.com/chengu...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/85000.html
摘要:是一個(gè)小巧的模塊載入框架,壓縮后,具有輕量級(jí)異步加載模塊等特點(diǎn)。通過(guò)和關(guān)鍵字,旨在建立客戶端和服務(wù)器端通用的加載規(guī)范。 隨著應(yīng)用復(fù)雜度的攀升,常規(guī)的JavaScript引入方式(script標(biāo)簽)已經(jīng)不能滿足需求,模塊化管理成為團(tuán)隊(duì)協(xié)作的高效方法,現(xiàn)在的模塊化管理主要有RequireJS、AMD、CMD、CommonJS、ES6四種模式。 RequireJS是一個(gè)小巧的JavaScri...
https://segmentfault.com/a/11... 原型 / 構(gòu)造函數(shù) / 實(shí)例 對(duì)原型的理解 我們知道在es6之前,js沒(méi)有類和繼承的概念,js是通過(guò)原型來(lái)實(shí)現(xiàn)繼承的。在js中一個(gè)構(gòu)造函數(shù)默認(rèn)自帶有一個(gè)prototype屬性, 這個(gè)的屬性值是一個(gè)對(duì)象,同時(shí)這個(gè)prototype對(duì)象自帶有一個(gè)constructor屬性,這個(gè)屬性指向這個(gè)構(gòu)造函數(shù),同時(shí)每一個(gè)實(shí)例 都有一個(gè)__proto...
摘要:所有依賴這個(gè)模塊的語(yǔ)句,都定義在一個(gè)回調(diào)函數(shù)中,等到加載完成之后,這個(gè)回調(diào)函數(shù)才會(huì)運(yùn)行。也采用語(yǔ)句加載模塊,但是不同于,它要求兩個(gè)參數(shù)第一個(gè)參數(shù),是一個(gè)數(shù)組,里面的成員就是要加載的模塊第二個(gè)參數(shù),則是加載成功之后的回調(diào)函數(shù)。 本篇文章來(lái)自對(duì)文章《js模塊化編程之徹底弄懂CommonJS和AMD/CMD!》的總結(jié),大部分摘自文章原話,本人只是為了學(xué)習(xí)方便做的筆記,之后有新的體會(huì)會(huì)及時(shí)補(bǔ)充...
摘要:來(lái)源于阿賢博客模塊化今天給大家寫(xiě)一篇關(guān)于前端模塊化開(kāi)發(fā)知識(shí)點(diǎn)。前端模塊化開(kāi)發(fā)那點(diǎn)歷史模塊化是指在解決某個(gè)復(fù)雜混雜問(wèn)題時(shí),依照一種分類的思維把問(wèn)題進(jìn)行系統(tǒng)性的分解以之處理。 來(lái)源于:阿賢博客 javascript模塊化 今天給大家寫(xiě)一篇關(guān)于前端模塊化開(kāi)發(fā)知識(shí)點(diǎn)。 前端模塊化開(kāi)發(fā)那點(diǎn)歷史 模塊化: 是指在解決某個(gè)復(fù)雜、混雜問(wèn)題時(shí),依照一種分類的思維把問(wèn)題進(jìn)行系統(tǒng)性的分解以之處理。模塊...
摘要:若不存在則模塊標(biāo)識(shí)應(yīng)該默認(rèn)定義為在加載器中被請(qǐng)求腳本的標(biāo)識(shí)。其中是一個(gè)數(shù)組,里面的成員就是要加載的模塊是模塊加載完成之后的回調(diào)函數(shù)。在加載與兩個(gè)模塊之后執(zhí)行回調(diào)函數(shù)實(shí)現(xiàn)具體過(guò)程。在判斷是否支持是否存在,存在則使用方式加載模塊。 我的github(PS:希望star): https://github.com/tonyzheng1... 今天由于項(xiàng)目中引入的echarts的文件太大,req...
閱讀 3688·2021-10-11 10:58
閱讀 2269·2021-10-08 10:05
閱讀 2059·2021-09-27 13:34
閱讀 3600·2019-08-30 15:53
閱讀 2748·2019-08-30 14:02
閱讀 3589·2019-08-29 16:55
閱讀 643·2019-08-29 15:41
閱讀 1092·2019-08-29 15:23