成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

require和ES6 import的區(qū)別

miguel.jiang / 2932人閱讀

摘要:模塊化的進程里,出現(xiàn)了很多模塊化的方案,,。隨著標準的發(fā)布,的規(guī)范也被廣泛使用了。只是瀏覽器的支持程度不高,需要配合轉碼工具使用。輸出可以看出,很重要的一個區(qū)別就是一個基本值是否會同步變化,

js模塊化的進程里,出現(xiàn)了很多模塊化的方案,commonjs,requirejs(AMD),CMD。隨著ES6標準的發(fā)布,import/export的規(guī)范也被廣泛使用了。只是瀏覽器的支持程度不高,需要配合轉碼工具使用。ES6的模塊化和之前社區(qū)的commonjs模塊化到底有什么區(qū)別呢?

Commonjs的require和module.exports

require是個函數(shù),動態(tài)加載,也因此

1.require導入是在運行時,理論上可以在任意地方調用require導入模塊;
2.require()的路徑可以是表達式:require("/app" + "/index");

require返回對應module.exports對象的淺拷貝

1.如果是module.exports里的基本類型的值,會得到該值的副本
2.如果是module.exports里的對象類型的值,會得到該值的引用
ES6的import和export

import在編譯時確定導入

1.路徑只能是字符串常量
2.import會被提升到文件最頂部
3.導入的變量是只讀的

import導入的是值引用,而不是值拷貝

1.模塊內部值發(fā)生變化,會對應影響到引用的地方
2.import導入與導出需要有一一映射關系,類似解構賦值。

代碼說明一下兩者的區(qū)別

Commonjs

// a.js
let a = 0;
const count = () => {
    a++;
}
setTimeout(function(){
    a++;
    console.log("in module the a is " + a);
}, 500);
module.exports = {
    a,
    count,
};

// b.js
let foo = require("a.js");
foo.count();
setTimeout(function(){
    console.log("in require the a is " + foo.a);
}, 1000);

// 輸出
// in the module the a is 2
// in the require the a is 0

因為foo是一份淺拷貝,所以a是require導入時export里a的值;而count是一個函數(shù),foo.count是這個函數(shù)的一個引用,所以調用時作用域是它聲明處一樣,也就是它修改的a是exports里的,而不是foo.a。

Es6 module

// a.js
let a = 0;
const count = () => {
    a++;
}
setTimeout(function(){
    a++;
    console.log("in module the a is " + a);
}, 500);
export {
    a,
    count,
};

// b.js
import { a, count } from "a.js";
count();
setTimeout(function(){
    console.log("in require the a is " + a);
}, 1000);

// 輸出
// in the module the a is 2
// in the require the a is 2

可以看出,很重要的一個區(qū)別就是一個基本值是否會同步變化,

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/104175.html

相關文章

  • require,import區(qū)別

    摘要:,區(qū)別遵循的模塊化規(guī)范不一樣模塊化規(guī)范即為提供一種模塊編寫模塊依賴和模塊運行的方案。出現(xiàn)的時間不同相關的規(guī)范由于野生性質,在年前后出生。作為的規(guī)范,一直沿用至今。這其實要感謝原來項目名叫做,后更名為這個神一般的項目。 require,import區(qū)別 遵循的模塊化規(guī)范不一樣 模塊化規(guī)范:即為 JavaScript 提供一種模塊編寫、模塊依賴和模塊運行的方案。誰讓最初的 JavaScri...

    Rango 評論0 收藏0
  • 前端模塊化詳解

    摘要:提倡依賴前置,在定義模塊的時候就要聲明其依賴的模塊。適用場景按需加載條件加載動態(tài)的模塊路徑注關于模塊化,詳細見阮一峰的入門模塊與模塊化區(qū)別模塊化的規(guī)范和兩種。 模塊化開發(fā)方便代碼的管理,提高代碼復用性,降低代碼耦合,每個模塊都會有自己的作用域。當前流行的模塊化規(guī)范有CommonJS,AMD,CMD,ES6的import/export CommonJS的主要實踐者就是nodejs,一般...

    zhangfaliang 評論0 收藏0
  • 談談Js前端模塊化規(guī)范

    摘要:依賴全部加載完成后,調用回調函數(shù)規(guī)范異步加載模塊規(guī)范和很相似,簡單,并與和的規(guī)范保持了很大的兼容性在規(guī)范中,一個模塊就是一個文件。 拋出問題: 在開發(fā)中在導入模塊時經常使用require和import; 導出模塊時使用module.exports/exports或者export/export default; 有時候為了引用一個模塊會使用require奇怪的是也可以使用import?...

    Steve_Wang_ 評論0 收藏0
  • 談談Js前端模塊化規(guī)范

    摘要:依賴全部加載完成后,調用回調函數(shù)規(guī)范異步加載模塊規(guī)范和很相似,簡單,并與和的規(guī)范保持了很大的兼容性在規(guī)范中,一個模塊就是一個文件。 拋出問題: 在開發(fā)中在導入模塊時經常使用require和import; 導出模塊時使用module.exports/exports或者export/export default; 有時候為了引用一個模塊會使用require奇怪的是也可以使用import?...

    NeverSayNever 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<