目次
es6 と commonjs の違いは何ですか

es6とcommonjsの違いは何ですか

May 05, 2022 pm 06:18 PM
es6

違い: 1. CommonJS は値のコピーを出力し、ES6 は値への参照を出力します; 2. CommonJS は実行時にロードされ、ES6 はコンパイル時の出力インターフェイスです; 3. CommonJS の require は次のとおりです。同期的にロードされるモジュール、ES6 のインポートは非​​同期的にロードされ、独立したモジュールの依存関係には解決フェーズがあります。

es6とcommonjsの違いは何ですか

このチュートリアルの動作環境: Windows 10 システム、ECMAScript バージョン 6.0、Dell G3 コンピューター。

es6 と commonjs の違いは何ですか

#1. CommonJS モジュールは値のコピーを出力しますが、ES6 モジュールは値への参照を出力します

commonjs の使い方を見てみましょう

1. まず lib.js ファイルを作成します

// lib.js
const counter = 3;
const incCounter = ()=>{
  counter++
}
module.exports = {
  counter,
  incCounter
}
ログイン後にコピー

2. main.js を再度作成し、commonjs を使用してインポートします

// main.js
var lib = require('./lib');
console.log(lib)
console.log(lib.counter);  // 3
lib.incCounter();
console.log(lib.counter); // 3
ログイン後にコピー

lib.js モジュールがロードされた後は、その内部変更は出力 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 モジュールの使用法を見てみましょう。実行結果はキャッシュされませんが、動的に取得されます。ローカルにロードされたモジュールからの値であり、変数は常にそれが配置されているモジュールにバインドされます。

補足: esmodule を通じてインポートされた変数は、再割り当てまたは変更できません。

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;
ログイン後にコピー

上記のコードの本質は、 fs モジュール全体 (つまり、すべての fs メソッドをロード) を実行し、オブジェクト (_fs) を生成して、このオブジェクトから 3 つのメソッドを読み取ります。この種の読み込みは「実行時読み込み」と呼ばれます。これは、このオブジェクトは実行時にのみ取得できるため、コンパイル時に「静的最適化」を行うことができないためです。したがって、commonjs は実行時にのみモジュールをロードする方法です。

import { stat, exists, readFile } from 'fs';
ログイン後にコピー

上記のコードの本質は、fs モジュールから 3 つのメソッドをロードすることであり、他のメソッドはロードされません。この種の読み込みは「コンパイル時読み込み」または静的読み込みと呼ばれます。つまり、ES6 はコンパイル時にモジュールの読み込みを完了できます。これは、CommonJS モジュールの読み込み方法よりも効率的です;

3 . CommonJS モジュール require () は同期読み込みモジュールです。ES6 モジュールのインポート コマンドは非同期読み込みです。モジュールの依存関係には独立した解決フェーズがあります。

同期読み込み: いわゆる同期読み込みとは、リソースまたはモジュールの読み込みプロセスが後続のコードの実行をブロックすることを意味します。

非同期読み込み: 後続のコードの実行はブロックされません。

ケースを見て、次のディレクトリを作成してみましょう。 ;

| -- a.js
| -- index.js
| -- c.js
ログイン後にコピー
// a.js
console.log('a.js文件的执行');
const importFun = () => {
  console.log(require('./c').c);
}
importFun()
module.exports = {
  importFun
}
ログイン後にコピー
// index.js
const A = require('./a');
console.log('index.js的执行');
ログイン後にコピー
// c.js
console.log('c.js的运行');
const c = 3
module.exports = {
  c
}
ログイン後にコピー

コマンド ノード インデックスを実行します。js

// a.js文件的执行
// c.js的运行
// 3
// index.js的执行
ログイン後にコピー

require の内容が後続のコードの実行をブロックすることがわかります。 c.js が最初に出力され、次に Index.js が出力されるため、require() は同期的に読み込まれます。

// a.js
console.log('a.js文件的执行');
export const importFun = () => {
  import('./c.js').then(({c})=>{
    console.log(c)
  })
}
importFun()
ログイン後にコピー
// index.js
import {importFun} from './a.js'
console.log('index.js的执行');
ログイン後にコピー
// c.js
console.log('c.js的运行');
export const c = 3
ログイン後にコピー
// 结果
// a.js文件的执行
// index.js的执行
// c.js的运行
// 3
ログイン後にコピー

c .js が後に出力されるため、import() がリソースを非同期的に読み込むことがわかります。 Index.js であり、後続のコードの実行はブロックされません。

#概要: 上記は commonjs と esmodule の違いです

1: CommonJS モジュールはコピーを出力します

2: CommonJS モジュールは実行時にロードされ、ES6 モジュールはコンパイル時の出力インターフェイスです。

3 : CommonJS モジュールの require() はモジュールを同期的にロードし、ES6 モジュールの import コマンドはモジュールの依存関係の独立した解析フェーズを使用して非同期的にロードします。

[関連する推奨事項:

javascript ビデオ チュートリアル

ウェブフロントエンド]

以上がes6とcommonjsの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ES6 で配列を反転する方法 ES6 で配列を反転する方法 Oct 26, 2022 pm 06:19 PM

ES6 では、配列オブジェクトの reverse() メソッドを使用して、配列の反転を実現できます。このメソッドは、配列内の要素の順序を逆にして、最後の要素を最初に、最初の要素を最後に配置するために使用されます。構文「array」 。逆行する()"。 reverse() メソッドは元の配列を変更します。変更したくない場合は、拡張演算子 "..." とともに使用する必要があり、構文は "[...array].reverse() 」。

非同期は es6 または es7 用ですか? 非同期は es6 または es7 用ですか? Jan 29, 2023 pm 05:36 PM

非同期はes7です。 async と await は ES7 に新しく追加されたもので、非同期操作のソリューションです。async/await は co モジュールとジェネレーター関数の糖衣構文と言え、より明確なセマンティクスで JS 非同期コードを解決します。名前が示すように、async は「非同期」を意味します。async は関数が非同期であることを宣言するために使用されます。async と await の間には厳密な規則があります。両方を互いに分離することはできず、await は async 関数内でのみ記述できます。

ミニ プログラムで es6 を es5 に変換する必要があるのはなぜですか? ミニ プログラムで es6 を es5 に変換する必要があるのはなぜですか? Nov 21, 2022 pm 06:15 PM

ブラウザの互換性のため。 ES6 は JS の新しい仕様として、多くの新しい構文と API を追加していますが、最新のブラウザーは ES6 の新機能を高度にサポートしていないため、ES6 コードを ES5 コードに変換する必要があります。 WeChat Web 開発者ツールでは、デフォルトで babel が使用され、開発者の ES6 構文コードを 3 つの端末すべてで適切にサポートされる ES5 コードに変換し、開発者がさまざまな環境によって引き起こされる開発上の問題を解決できるようにします。プロジェクト内でのみ設定して確認するだけです。 「ES6~ES5」オプション。

es6 の 2 つの配列で異なる項目を見つける方法 es6 の 2 つの配列で異なる項目を見つける方法 Nov 01, 2022 pm 06:07 PM

手順: 1. 構文 "newA=new Set(a); newB=new Set(b);" を使用して、2 つの配列をそれぞれセット型に変換します; 2. has() と filter() を使用して差分セットを検索します、構文 " new Set([...newA].filter(x =>!newB.has(x)))" では、差分セット要素がセット コレクションに含まれて返されます。 3. 配列を使用します。 from セットを配列に変換するタイプ、構文は「Array.from(collection)」です。

es5 および es6 で配列重複排除を実装する方法 es5 および es6 で配列重複排除を実装する方法 Jan 16, 2023 pm 05:09 PM

es5 では、for ステートメントと IndexOf() 関数を使用して配列の重複排除を実現できます。構文 "for(i=0;i<配列長;i++){a=newArr.indexOf(arr[i]);if( a== -1){...}}」。 es6 では、スプレッド演算子 Array.from() および Set を使用して重複を削除できます。まず配列を Set オブジェクトに変換して重複を削除してから、スプレッド演算子または Array.from() 関数を使用する必要があります。 Set オブジェクトを配列に変換してグループ化するだけです。

es6 の一時的なデッドゾーンとは何を意味しますか? es6 の一時的なデッドゾーンとは何を意味しますか? Jan 03, 2023 pm 03:56 PM

es6 では、一時的なデッド ゾーンは構文エラーであり、ブロックを閉じたスコープにする let および const コマンドを指します。コード ブロック内では、let/const コマンドを使用して変数が宣言される前に、変数は使用できず、変数が宣言される前は変数の「デッド ゾーン」に属します。これは構文上「一時デッド ゾーン」と呼ばれます。 ES6 では、一時的なデッド ゾーンや let ステートメントや const ステートメントでは変数のプロモーションが発生しないことを規定しています。これは主に実行時エラーを減らし、変数が宣言される前に使用されて予期しない動作が発生するのを防ぐためです。

es6 構文が必要ですか? es6 構文が必要ですか? Oct 21, 2022 pm 04:09 PM

いいえ、require は CommonJS 仕様のモジュール構文であり、es6 仕様のモジュール構文は import です。 require は実行時にロードされ、import はコンパイル時にロードされます。require はコード内のどこにでも記述できます。import はファイルの先頭にのみ記述でき、条件文や関数スコープでは使用できません。モジュール属性は導入されるだけです。 require を実行した場合、そのためパフォーマンスは比較的低くなりますが、インポート コンパイル中に導入されたモジュールのプロパティのパフォーマンスはわずかに高くなります。

es6 の配列にある項目の数を確認する方法 es6 の配列にある項目の数を確認する方法 Jan 18, 2023 pm 07:22 PM

ES6 では、配列オブジェクトの length 属性を使用して、配列内にある項目の数を決定する、つまり、配列内の要素の数を取得できます。この属性は、配列内の要素の数を返すことができます。 "array.length" ステートメントを使用すると、配列オブジェクトの要素の数を表す値、つまり長さの値が返されます。

See all articles