gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

詳細了解javascript中的modules、import和export

詳細了解javascript中的modules、import和export

在互聯網的洪荒時代,網站主要用 HTML和 CSS 開發的。如果將 JavaScript 加載到頁面中,通常是以小片段的形式提供效果和交互,一般會把所有的 JavaScript 代碼全都寫在一個文件中,并加載到一個 script 標簽中。盡管可以把 JavaScript 拆分為多個文件,但是所有的變量和函數仍然會被添加到全局作用域中。

但是后來 JavaScript 在瀏覽器中發揮著重要的作用,迫切需要使用第三方代碼來完成常見任務,并且需要把代碼分解為模塊化的文件,避免污染全局命名空間。

ECMAScript 2015 規范在 JavaScript 語言中引入了 module,也有了 import 和 export 語句。在本文中,我們一起來學習 JavaScript 模塊,以及怎樣用 importexport 來組織代碼。

模塊化編程

在 JavaScript 中出現模塊的概念之前,當我們想要把自己的代碼組織為多個塊時,一般會創建多個文件,并且將它們鏈接為單獨的腳本。下面先舉例說明,首先創建一個 index.html 文件和兩個JavaScript文件“ functions.jsscript.js

index.html 文件用來顯示兩個數字的和、差、乘積和商,并鏈接到 script 標簽中的兩個 JavaScript 文件。打開 index.html 并添加以下代碼:

index.html

<!DOCTYPE html> <html lang="en">   <head>     <meta charset="utf-8" />     <meta name="viewport" content="width=device-width, initial-scale=1.0" />      <title>JavaScript Modules</title>   </head>    <body>     <h1>Answers</h1>     <h2><strong id="x"></strong> and <strong id="y"></strong></h2>      <h3>Addition</h3>     <p id="addition"></p>      <h3>Subtraction</h3>     <p id="subtraction"></p>      <h3>Multiplication</h3>     <p id="multiplication"></p>      <h3>pision</h3>     <p id="pision"></p>      <script src="functions.js"></script>     <script src="script.js"></script>   </body> </html>

這個頁面很簡單,就不詳細說明了。

functions.js 文件中包含將會在第二個腳本中用到的數學函數。打開文件并添加以下內容:

functions.js

function sum(x, y) {   return x + y }  function difference(x, y) {   return x - y }  function product(x, y) {   return x * y }  function quotient(x, y) {   return x / y }

最后,script.js 文件用來確定 x 和 y 的值,以及調用前面那些函數并顯示結果:

script.js

const x = 10 const y = 5  document.getElementById('x').textContent = x document.getElementById('y').textContent = y  document.getElementById('addition').textContent = sum(x, y) document.getElementById('subtraction').textContent = difference(x, y) document.getElementById('multiplication').textContent = product(x, y) document.getElementById('pision').textContent = quotient(x, y)

保存之后在瀏覽器中打開 index.html 可以看到所有結果:

詳細了解javascript中的modules、import和export

對于只需要一些小腳本的網站,這不失為一種有效的組織代碼的方法。但是這種方法存在一些問題:

  • 污染全局命名空間:你在腳本中創建的所有變量(sumdifference 等)現在都存在于 window 對象中。如果你打算在另一個文件中使用另一個名為 sum 的變量,會很難知道在腳本的其它位置到底用的是哪一個值變量,因為它們用的都是相同的 window.sum 變量。唯一可以使變量私有的方法是將其放在函數的作用域中。甚至在 DOM 中名為 xid 可能會和 var x 存在沖突。
  • 依賴管理:必須從上到下依次加載腳本來確保可以使用正確的變量。將腳本分別保存存為不同文件會產生分離的錯覺,但本質上與放在頁面中的單個 <script> 中相同。

在 ES6 把原生模塊添加到 JavaScript 語言之前,社區曾經嘗試著提供了幾種解決方案。第一個解決方案是用原生 JavaScript 編寫的,例如將所有代碼都寫在 objects 或立即調用的函數表達式(IIFE)中,并將它們放在全局命名空間中的單個對象上。這是對多腳本方法的一種改進,但是仍然存在將至少一個對象放入全局命名空間的問題,并沒有使在第三方之間一致地共享代碼的問題變得更加容易。

之后又出現了一些模塊解決方案:CommonJS 是一種在 Node.js 實現的同步方法,異步模塊定義(AMD)是一種異步方法,還有支持前面兩種樣式的通用方法——通用模塊定義(UMD)。

這些解決方案的出現使我們可以更輕松地以的形式共享和重用代碼,也就是可以分發和共享的模塊,例如 npm。但是由于存在許多解決方案,并且都不是 JavaScript 原生的,所以需要依靠 Babel、Webpack 或 Browserify之類的工具才能在瀏覽器中使用。

由于多文件方法存在許多問題,并且解決方案很復雜,所以開發人員對把模塊化開發的方法引入 JavaScript 語言非常感興趣。于是 ECMAScript 2015 開始支持 JavaScript module

module 是一組代碼,用來提供其他模塊所使用的功能,并能使用其他模塊的功能。 export 模塊提供代碼,import 模塊使用其他代碼。模塊之所以有用,是因為它們允許我們重用代碼,它們提供了許多可用的穩定、一致的接口,并且不會污染全局命名空間。

模塊(有時稱為 ES 模塊)現在可以在原生 JavaScript 中使用,在本文中,我們一起來探索怎樣在代碼中使用及實現。

原生 JavaScript 模塊

JavaScript 中的模塊使用importexport 關鍵字:

  • import:用于讀取從另一個模塊導出的代碼。
  • export:用于向其他模塊提供代碼。

接下來把前面的的 functions.js 文件更新為模塊并導出函數。在每個函數的前面添加 export

functions.js

export function sum(x, y) {   return x + y }  export function difference(x, y) {   return x - y }  export function product(x, y) {   return x * y }  export function quotient(x, y) {   return x / y }

script.js 中用 import 從前面的 functions.js 模塊中檢索代碼。

注意import 必須始終位于文件的頂部,然后再寫其他代碼,并且還必須包括相對路徑(在這個例子里為 ./)。

script.js 中的代碼改成下面的樣子:

script.js

import { sum, difference, product, quotient } from './functions.js'  const x = 10 const y = 5  document.getElementById('x').textContent = x document.getElementById('y').textContent = y  document.getElementById('addition').textContent = sum(x, y) document.getElementById('subtraction').textContent = difference(x, y) document.getElementById('multiplication').textContent = product(x, y) document.getElementById('pision').textContent = quotient(x, y)

注意:要通過在花括號中命名單個函數來導入。

為了確保代碼作為模塊導入,而不是作為常規腳本加載,要在 index.html 中的 script 標簽中添加type="module"。任何使用 importexport 的代碼都必須使用這個屬性:

index.html

<script    type="module" src="functions.js"> </script> <script    type="module" src="script.js"> </script>

由于受限于 CORS 策略,必須在服務器環境中使用模塊,否則會出現下面的錯誤:

Access to script at 'file:///Users/your_file_path/script.js' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, chrome-untrusted, https.

模塊與常規腳本不一樣的地方:

  • 模塊不會向全局(window)作用域添加任何內容。
  • 模塊始終處于嚴格模式。
  • 在同一文件中把同一模塊加載兩次不會出問題,因為模塊僅執行一次
  • 模塊需要服務器環境。

模塊仍然經常與打包程序(如 Webpack)一起配合使用,用來增加對瀏覽器的支持和附加功能,但它們也可以直接用在瀏覽器中。

接下來探索

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
国产在线无码精品| 99久久国产宗和精品1上映 | 美女av免费观看| 中文久久久久久| 怡红院av亚洲一区二区三区h| 日韩video| 九九久久九九久久| 制服丝袜综合网| 99九九99九九九99九他书对| 亚洲欧美久久久久| 国产精品国产亚洲精品看不卡| 欧美私人情侣网站| 在线能看的av网站| 亚洲中文字幕无码不卡电影| 18岁网站在线观看| www亚洲成人| 成人中文字幕av| 成人免费视频久久| 精品www久久久久奶水| 国产又大又硬又粗| 国产成人无码av在线播放dvd| 妞干网在线视频观看| 波多野结衣之无限发射| 91av资源网| 日本在线视频www| av免费中文字幕| 青青视频免费在线| av 日韩 人妻 黑人 综合 无码| 一级片黄色免费| 欧美日本视频在线观看| 男人天堂1024| 日韩视频在线免费看| 日韩无套无码精品| 激情五月婷婷久久| 黄色一级片国产| 99热手机在线| 欧洲在线免费视频| 欧美二区在线视频| 免费黄色特级片| 久国产精品视频| 日本天堂免费a| 久久久性生活视频| 另类小说色综合| 国产大片一区二区三区| 欧美国产综合在线| 男女h黄动漫啪啪无遮挡软件| 成人在线看视频| xxww在线观看| 亚洲成色www.777999| 国产又粗又长又爽又黄的视频| 996这里只有精品| 日韩 欧美 高清| 日本网站在线看| 精品少妇一区二区三区在线| 天天干天天综合| 草草草视频在线观看| 99免费视频观看| 蜜臀在线免费观看| 97在线免费公开视频| 波多野结衣网页| 成年人观看网站| 黄色a级在线观看| 国产乱子夫妻xx黑人xyx真爽| 色偷偷中文字幕| 欧美日韩第二页| 国产成人三级视频| 最新中文字幕免费视频| 国产成人永久免费视频| 可以看污的网站| 国产熟女高潮视频| 九九热只有这里有精品| 人妻av无码专区| 天堂av在线8| 激情五月开心婷婷| 美脚丝袜脚交一区二区| 一级片黄色免费| www.这里只有精品| 男人揉女人奶房视频60分| 影音先锋成人资源网站| 亚洲免费黄色录像| 日本a√在线观看| 国产男女免费视频| 99久热在线精品视频| 日韩视频在线观看一区二区三区| 五月婷婷狠狠操| 国产女女做受ⅹxx高潮| 18禁免费观看网站| 黄色一级片黄色| 国产精品一区在线免费观看| 男人插女人下面免费视频| 亚洲中文字幕无码不卡电影| 精品无码一区二区三区在线| 国产1区2区3区中文字幕| 男同互操gay射视频在线看| 亚洲 国产 图片| 青青青在线视频免费观看| 欧美日韩中文在线视频| 久久精品免费一区二区| 青青青免费在线| 青青青青草视频| 欧美 日本 亚洲| 男人操女人逼免费视频| 18禁男女爽爽爽午夜网站免费| 人人妻人人添人人爽欧美一区| 日韩一级片免费视频| 九一国产精品视频| 免费在线观看的av网站| 日本美女高潮视频| 亚洲三级视频网站| 中文字幕在线观看第三页| 亚洲国产精品三区| 九九精品久久久| 天天久久综合网| www.欧美黄色| 欧美日韩在线一| 三级在线视频观看| 91香蕉国产线在线观看| 久久视频免费在线| 人人妻人人添人人爽欧美一区| www.com毛片| 五月婷婷六月合| 99re99热| jizz欧美激情18| 青青草原播放器| 国产69精品久久久久久久| 欧美两根一起进3p做受视频| 日本激情综合网| 国产 国语对白 露脸| 久久网站免费视频| 91日韩精品视频| 玩弄中年熟妇正在播放| 制服丝袜综合网| 日本a在线天堂| 久久综合久久色| 奇米777在线视频| www.玖玖玖| 超碰免费在线公开| 国产精品久久中文字幕| 视频免费1区二区三区| 欧美精品久久久久久久自慰| 搡女人真爽免费午夜网站| 亚洲黄色网址在线观看| 亚洲xxxx2d动漫1| 91免费黄视频| 思思久久精品视频| 黄在线观看网站| 五月天激情图片| 亚洲色图 在线视频| 欧美 日韩 国产精品| 日韩av片网站| 国产免费观看高清视频| 天天成人综合网| 国产熟人av一二三区| 第九区2中文字幕| 国产乱女淫av麻豆国产| 人妻精品无码一区二区三区| 女女同性女同一区二区三区按摩| 国产超级av在线| 成人国产一区二区三区| 伊人色在线观看| 8x8x最新地址| 日韩在线视频在线观看| 日韩精品免费一区| 欧美日韩精品区别| 亚洲精品怡红院| 已婚少妇美妙人妻系列| 国产男女免费视频| 日b视频免费观看| 久久最新免费视频| 欧美一级xxxx| 在线观看免费视频高清游戏推荐| 农村妇女精品一二区| 欧美二区在线视频| 国产v片免费观看| 国产精品一色哟哟| 大陆极品少妇内射aaaaaa| 999在线精品视频| 91丨九色丨蝌蚪| 亚洲另类第一页| 免费成年人高清视频| 污网站在线免费| 亚洲黄色片免费| 91蝌蚪视频在线| 中文字幕55页| 性做爰过程免费播放| 永久免费网站视频在线观看| 国产高清免费在线| 51自拍视频在线观看| 香蕉视频免费版| 少妇高潮大叫好爽喷水| 欧美a级黄色大片| 国产乱人伦精品一区二区三区| 国产精品久久久久久久久电影网| 奇米777四色影视在线看| 丁香婷婷综合激情| 激情深爱综合网| 久久人妻精品白浆国产| 国产视频1区2区3区| www.51色.com| 欧美日韩视频免费|