成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

require和ES6 import的區(qū)別

miguel.jiang / 2985人閱讀

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

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

Commonjs的require和module.exports

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

1.require導(dǎo)入是在運(yùn)行時(shí),理論上可以在任意地方調(diào)用require導(dǎo)入模塊;
2.require()的路徑可以是表達(dá)式:require("/app" + "/index");

require返回對(duì)應(yīng)module.exports對(duì)象的淺拷貝

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

import在編譯時(shí)確定導(dǎo)入

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

import導(dǎo)入的是值引用,而不是值拷貝

1.模塊內(nèi)部值發(fā)生變化,會(huì)對(duì)應(yīng)影響到引用的地方
2.import導(dǎo)入與導(dǎo)出需要有一一映射關(guān)系,類似解構(gòu)賦值。

代碼說明一下兩者的區(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

因?yàn)閒oo是一份淺拷貝,所以a是require導(dǎo)入時(shí)export里a的值;而count是一個(gè)函數(shù),foo.count是這個(gè)函數(shù)的一個(gè)引用,所以調(diào)用時(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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/104175.html

相關(guān)文章

  • require,import區(qū)別

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

    Rango 評(píng)論0 收藏0
  • 前端模塊化詳解

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

    zhangfaliang 評(píng)論0 收藏0
  • 談?wù)凧s前端模塊化規(guī)范

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

    Steve_Wang_ 評(píng)論0 收藏0
  • 談?wù)凧s前端模塊化規(guī)范

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

    NeverSayNever 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<