国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

es6與commonjs 的區(qū)別

這篇具有很好參考價值的文章主要介紹了es6與commonjs 的區(qū)別。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. 區(qū)別:

1、CommonJS輸出的是一個值的拷貝,ES6輸出的是值的引用;
2、CommonJS是運行時加載,ES6是編譯時輸出接口;
3、CommonJS的require是同步加載模塊,ES6的import是異步加載,有獨立模塊依賴的解析階段。

1.1CommonJS 模塊輸出的是一個值的拷貝,ES6 模塊輸出的是值的引用

commonjs的用法,我們一起來看一下

1.首先創(chuàng)建一個lib.js的文件

// lib.js

const counter = 3;

const incCounter = ()=>{

  counter++

}

module.exports = {

  counter,

  incCounter

}

2.再次創(chuàng)建一個main.js,使用commonjs的方式導(dǎo)入

// main.js

var lib = require('./lib');

console.log(lib)

console.log(lib.counter);  // 3

lib.incCounter();

console.log(lib.counter); // 3

lib.js模塊加載以后,它的內(nèi)部變化就影響不到輸出的lib.counter了。這是因為mod.counter是一個原始類型的值,會被緩存;

esmodule的用法,我們一起來看一下

// lib.js

export let counter = 3;

export function incCounter () {

  counter++;

}
// main.js

import { counter, incCounter } from './util.mjs'

console.log(counter);  //3 

incCounter()

console.log(counter)  //4

ES6 模塊不會緩存運行結(jié)果,而是動態(tài)地去被加載的模塊取值,并且變量總是綁定其所在的模塊。

補充:通過esmodule導(dǎo)入的變量是不能重新賦值修改的。

1.2、CommonJS 模塊是運行時加載,ES6 模塊是編譯時輸出接口

// CommonJS模塊

let { stat, exists, readFile } = require('fs');

  

// 等同于

let _fs = require('fs');

let stat = _fs.stat;

let exists = _fs.exists;

let readfile = _fs.readfile;

上面代碼的實質(zhì)是整體加載fs模塊(即加載fs的所有方法),生成一個對象(_fs),然后再從這個對象上面讀取 3 個方法。這種加載稱為“運行時加載”,因為只有運行時才能得到這個對象,導(dǎo)致完全沒辦法在編譯時做“靜態(tài)優(yōu)化”。因此commonjs屬于再運行時才會加載模塊的方式。

import { stat, exists, readFile } from 'fs';

上面代碼的實質(zhì)是從fs模塊加載 3 個方法,其他方法不加載。這種加載稱為“編譯時加載”或者靜態(tài)加載,即 ES6 可以在編譯時就完成模塊加載,效率要比 CommonJS 模塊的加載方式高;

1.3、CommonJS 模塊的require()是同步加載模塊,ES6 模塊的import命令是異步加載,有一個獨立的模塊依賴的解析階段

同步加載:所謂同步加載就是加載資源或者模塊的過程會阻塞后續(xù)代碼的執(zhí)行;

異步加載:不會阻塞后續(xù)代碼的執(zhí)行;

我們來看一個案例,創(chuàng)建如下的目錄;

| -- a.js

| -- index.js

| -- c.js
// a.js

console.log('a.js文件的執(zhí)行');

const importFun = () => {

  console.log(require('./c').c);

}

importFun()

module.exports = {

  importFun

}
// index.js

const A = require('./a');

console.log('index.js的執(zhí)行');
// c.js

console.log('c.js的運行');

const c = 3

module.exports = {

  c

}

執(zhí)行命令 node index.js

// a.js文件的執(zhí)行

// c.js的運行

// 3

// index.js的執(zhí)行

我們會發(fā)現(xiàn),require的內(nèi)容會阻塞后續(xù)代碼的執(zhí)行。因為c.js先打印出來,然后在是index.js的打印,所以說require()是同步加載的;

// a.js

console.log('a.js文件的執(zhí)行');

export const importFun = () => {

  import('./c.js').then(({c})=>{

    console.log(c)

  })

}

importFun()
// index.js

import {importFun} from './a.js'

console.log('index.js的執(zhí)行');
// c.js

console.log('c.js的運行');

export const c = 3
// 結(jié)果

// a.js文件的執(zhí)行

// index.js的執(zhí)行

// c.js的運行

// 3

可以看的出來:import()是異步加載資源的,因為c.js是在index.js的后面打印出來的,并不會阻塞后續(xù)代碼的執(zhí)行;

2.總結(jié):

以上便是commonjs和esmodule的幾個區(qū)別

1: CommonJS 模塊輸出的是一個值的拷貝,ES6 模塊輸出的是值的引用

2: CommonJS 模塊是運行時加載,ES6 模塊是編譯時輸出接口

3: CommonJS 模塊的require()是同步加載模塊,ES6 模塊的import命令是異步加載,有一個獨立的模塊依賴的解析階段文章來源地址http://www.zghlxwxcb.cn/news/detail-446886.html

到了這里,關(guān)于es6與commonjs 的區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 前端面試:【前端工程化】CommonJS 與 ES6 模塊

    嗨,親愛的前端開發(fā)者!在現(xiàn)代Web開發(fā)中,模塊化是構(gòu)建可維護和可擴展應(yīng)用程序的關(guān)鍵。本文將深入探討兩種主要的JavaScript模塊系統(tǒng):CommonJS 和 ES6 模塊,以幫助你了解它們的工作原理、用法以及如何選擇合適的模塊系統(tǒng)。 1. CommonJS: 用途: CommonJS 是一種模塊系統(tǒng),最初

    2024年02月11日
    瀏覽(103)
  • CommonJS 和 ES6 Module:一場模塊規(guī)范的對決(上)

    CommonJS 和 ES6 Module:一場模塊規(guī)范的對決(上)

    ?? 前端開發(fā)工程師(主業(yè))、技術(shù)博主(副業(yè))、已過CET6 ?? 阿珊和她的貓_CSDN個人主頁 ?? ??透呒墝n}作者、在??痛蛟旄哔|(zhì)量專欄《前端面試必備》 ?? 藍橋云課簽約作者、已在藍橋云課上架的前后端實戰(zhàn)課程《Vue.js 和 Egg.js 開發(fā)企業(yè)級健康管理項目》、《帶你從入

    2024年01月23日
    瀏覽(28)
  • Commonjs 和 Es Module詳解

    Commonjs 和 Es Module詳解

    今天我們來深度分析一下 Commonjs 和 Es Module ,希望通過本文的學(xué)習(xí),能夠讓大家徹底明白 Commonjs 和 Es Module 原理,能夠一次性搞定面試中遇到的大部分有關(guān) Commonjs 和 Es Module 的問題。 帶上疑問開始今天的分析: 1 Commonjs 和 Es Module 有什么區(qū)別 ? 2 Commonjs 如何解決的循環(huán)引用問

    2024年02月22日
    瀏覽(21)
  • CommonJs規(guī)范和ES 模塊系統(tǒng)

    CommonJS 是一種模塊化規(guī)范,用于在 JavaScript 應(yīng)用程序中組織和管理代碼的模塊。它定義了模塊的導(dǎo)入和導(dǎo)出機制,使得開發(fā)者可以將代碼分割成可復(fù)用的模塊,并在不同的文件中引用和使用這些模塊。 CommonJS 規(guī)范有以下幾個主要 特點 和 用途 : 模塊化組織代碼 :CommonJS 允許

    2024年02月12日
    瀏覽(23)
  • 了解一下ES module 和 Commonjs

    最近測試了幾個 ES module 和 Commonjs 的例子,理解了之前不太理解的概念,記錄一下。要是想多了解的可以去看看阮老師的 Module 那部分。會貼一小部分的代碼,不會貼所有驗證的代碼。 Commonjs require 大概流程 本質(zhì)上 Commonjs 一直是 node 在使用的規(guī)范,雖然其他平臺也可以使用。

    2024年02月12日
    瀏覽(19)
  • 深入理解CommonJS和ES Module? 優(yōu)缺點?什么時候用?

    在webpack中,我們可以使用多種模塊化方式,如CommonJS和ES Module。 CommonJS是什么? CommonJS是一種模塊化規(guī)范,它是Node.js采用的模塊化規(guī)范,它的主要特點是同步加載模塊,模塊輸出的是一個值的拷貝,而不是引用。CommonJS的優(yōu)點是簡單易用,可以在服務(wù)器端和客戶端使用,缺點

    2024年02月03日
    瀏覽(24)
  • import后加不加{}的區(qū)別(es6引用)

    目錄 背景: 1.不加{} 2.加{} 總結(jié): ES6使用import引入定義模塊時加不加花括號: export及export default的區(qū)別: 背景: 當(dāng)需要在main.js中引入A.js 1.不加{} 這種引入方法,A.js文件中需要提供默認的 export defulat導(dǎo)出 ( 必須是默認導(dǎo)出 ), 這樣在main.js文件中才可以使用A 2.加{} 這種引

    2024年02月04日
    瀏覽(21)
  • 【前端模塊化】JS模塊化思想以及相關(guān)規(guī)范(CommonJS、ES module)

    1.模塊化概念 隨著前端應(yīng)用日趨復(fù)雜,項目代碼也大量膨脹,模塊化就是一種最主流的代碼組織方式, 一個模塊就是一個實現(xiàn)特定功能的文件 ,它通過把我們的復(fù)雜代碼按照功能的不同,劃分為不同的模塊單獨維護的這種方式,去提高我們的開發(fā)效率,降低維護成本。要用

    2024年02月01日
    瀏覽(42)
  • commonjs

    CommonJs 是 js 模塊化的社區(qū)規(guī)范 隨著前端頁面復(fù)雜度的提升,依賴的第三方庫的增加,導(dǎo)致的 js 依賴混亂,全局變量的污染,和命名沖突 單個 js 文件內(nèi)容太多,導(dǎo)致了維護困難,拆分成為多個文件又會發(fā)生第一點描述的問題 v8 引擎的出現(xiàn),讓 js 有了媲美編譯型語言的運行速

    2024年04月17日
    瀏覽(17)
  • 前端技術(shù)探秘-Nodejs的CommonJS規(guī)范實現(xiàn)原理

    Node.js是一個基于ChromeV8引擎的JavaScript運行環(huán)境,使用了一個事件驅(qū)動、非阻塞式I/O模型,讓JavaScript 運行在服務(wù)端的開發(fā)平臺,它讓JavaScript成為與PHP、Python、Perl、Ruby等服務(wù)端語言平起平坐的腳本語言。Node中增添了很多內(nèi)置的模塊,提供各種各樣的功能,同時也提供許多第三

    2024年02月05日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包