色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

Javascript模塊化機(jī)制實(shí)現(xiàn)原理詳解

瀏覽:94日期:2023-11-06 18:39:30

1. 概述

js發(fā)展初期暴露了其缺陷:缺乏模塊,后來提出了commonJS規(guī)范來規(guī)范其模塊的規(guī)范。作為JavaScript新手,發(fā)現(xiàn)對(duì)于其JavaScript的模塊機(jī)制,不是很理解。我查閱了一些資料整理了JavaScript CommonJS的原理和機(jī)制。

2. JavaScript

2.1 無后端的項(xiàng)目

這類項(xiàng)目不能使用CommonJS的模塊規(guī)范,這是我起初所犯的錯(cuò)誤。在沒有es6被大多數(shù)瀏覽器支持的時(shí)候,js文件充斥著var和function,由此引來了命名沖突和污染,使得JavaScript代碼很復(fù)雜。es6的class概念出現(xiàn)有效規(guī)范了JavaScript的模塊化規(guī)范。由于這類項(xiàng)目只能通過script標(biāo)簽引入,我們?cè)谶@里講一下script標(biāo)簽的相關(guān)知識(shí)。

每當(dāng)瀏覽器解析到<script>標(biāo)簽(無論內(nèi)嵌還是外鏈)時(shí),瀏覽器會(huì)優(yōu)先下載、解析并執(zhí)行該標(biāo)簽中的javaScript代碼,而阻塞了其后所有頁面內(nèi)容的下載和渲染。根據(jù)上述對(duì)<script>標(biāo)簽特性的描述,我們知道,在該示例中,當(dāng)瀏覽器解析到<script>標(biāo)簽時(shí),瀏覽器會(huì)停止解析其后的內(nèi)容,而優(yōu)先下載腳本文件,并執(zhí)行其中的代碼,這意味著,其后的test.css樣式文件和<body>標(biāo)簽都無法被加載,由于<body>標(biāo)簽無法被加載,那么頁面自然就無法渲染了。因此傳統(tǒng)做法是假定point.js文件:

//定義類class Point { constructor(x, y) { this.x = x; this.y = y; } toString() { return ’(’ + this.x + ’, ’ + this.y + ’)’; }}

則在index.js中引入point.js,這需要在index.html中body的尾部

<script src='http://www.lshqa.cn/bcjs/point.js'></script><script src='http://www.lshqa.cn/bcjs/index.js'></script>

這樣就可以在index.js使用point類了。

總結(jié)下來:

js類庫必須在header中引入,保證對(duì)之后script引入的js文件的支持,畢竟script標(biāo)簽的執(zhí)行順序是順序執(zhí)行,script標(biāo)簽引入順序和實(shí)際引入順序相同。

自定義的script標(biāo)簽引入的js文件,要放在body的尾部,保證DOM元素渲染結(jié)束。

每個(gè)js文件盡量是es6 class對(duì)象,避免作用域和命名域的沖突。

2.2 后端 服務(wù)器 NodeJS

模塊引用的實(shí)例如下:require方法

const math = require('math');

模塊的定義:

上下文提供了exports對(duì)象用于導(dǎo)出當(dāng)前模塊方法和變量,并且它是唯一的導(dǎo)出出口。在模塊中,還存在一個(gè)module對(duì)象,他代表模塊自身,exports是module對(duì)象的屬性。導(dǎo)出方式:

// math.jsexports.add = function () { };module.exports.add = function () { };

2.3 后端 es6的module

ES6模塊不是對(duì)象,而是通過export命令顯式指定輸出的代碼,輸入時(shí)也采用靜態(tài)命令的形式。

由于ES6模塊是編譯時(shí)加載,使得靜態(tài)分析成為可能。有了它,就能進(jìn)一步拓寬JavaScript的語法,比如引入宏(macro)和類型檢驗(yàn)(type system)這些只能靠靜態(tài)分析實(shí)現(xiàn)的功能。

除了靜態(tài)加載帶來的各種好處,ES6模塊還有以下好處:

不再需要UMD模塊格式了,將來服務(wù)器和瀏覽器都會(huì)支持ES6模塊格式。目前,通過各種工具庫,其實(shí)已經(jīng)做到了這一點(diǎn)。

將來瀏覽器的新API就能用模塊格式提供,不再必要做成全局變量或者navigator對(duì)象的屬性。

不再需要對(duì)象作為命名空間(比如Math對(duì)象),未來這些功能可以通過模塊提供。

瀏覽器使用ES6模塊的語法如下:

導(dǎo)出對(duì)象和變量:

var firstName = ’XXX’;var lastName = ’YYY’;export {firstName, lastName};Point.js// 導(dǎo)出類對(duì)象export default class Point extends circle {}

引入module

import Point from 'Point';

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 亚洲欧美一区在线 | 欧美一级毛片不卡免费观看 | 日产一区两区三区 | 中文精品视频一区二区在线观看 | 久久精品中文字幕免费 | 俺来也欧美亚洲a∨在线 | 视频二区在线观看 | 欧美丝袜xxxxx在线播放 | 日韩成人在线观看视频 | 亚洲欧美日韩中文字幕在线一 | 欧美亚洲国产精品久久久 | 亚洲天堂美女视频 | 色香欲综合成人免费视频 | 日本久久伊人 | 扒开双腿猛进入喷水免费视频 | 国产日韩精品欧美一区喷 | 久久在视频 | 99精品视频在线视频免费观看 | 中文字幕精品一区二区精品 | 青草青99久久99九九99九九九 | aaaaaa级特色特黄的毛片 | 国产欧美一区二区精品性色 | 欧美成网| www.欧美在线观看 | 欧美一级毛片免费看高清 | 在线不卡一区二区 | 性刺激免费视频观看在线观看 | 成人国产精品一级毛片天堂 | 国产欧美一区二区三区视频 | 手机看成人片 | 国产成人免费永久播放视频平台 | 99爱视频| 日韩欧美视频一区 | 免费人成在线观看网站品爱网 | 成人手机视频在线观看 | 中文字幕一区二区三区免费视频 | 亚洲国产毛片 | 玖玖爱精品 | 欧美精品国产精品 | 欧美成a人片在线观看久 | 悟空影视大全免费高清 |