目次
Answers
Addition
Subtraction
Multiplication
pision
ホームページ ウェブフロントエンド jsチュートリアル モジュール、JavaScript のインポートとエクスポートを見てみましょう

モジュール、JavaScript のインポートとエクスポートを見てみましょう

Dec 29, 2020 pm 05:31 PM
export import javascript

javascriptこのコラムでは、モジュールのインポートとエクスポートの使用法を紹介します

モジュール、JavaScript のインポートとエクスポートを見てみましょう

おすすめ (無料): javascript (ビデオ)

インターネットの先史時代、Web サイトは主に HTML と CSS を使用して開発されました。 JavaScript がページに読み込まれると、通常、小さなフラグメントでエフェクトやインタラクションが提供されます。通常、すべての JavaScript コードは 1 つのファイルに記述され、script タグに読み込まれます。 JavaScript は複数のファイルに分割できますが、すべての変数と関数はグローバル スコープに追加されます。

しかしその後、JavaScript がブラウザーで重要な役割を果たし、一般的なタスクを完了するためにサードパーティのコードを使用する緊急の必要性が生じ、グローバル名前空間の汚染を避けるためにコードをモジュール ファイルに分割する必要がありました。 。

ECMAScript 2015 仕様では、JavaScript 言語の module とインポートおよびエクスポート ステートメントが導入されました。この記事では、JavaScript モジュールと、importexport を使用してコードを整理する方法について学びます。

モジュラー プログラミング

モジュールの概念が JavaScript に登場する前、コードを複数のブロックに編成したいときは、通常、複数のファイルを作成し、それらを個別にリンクしていました。スクリプト。以下に例を示します。まず、index.html ファイルと 2 つの JavaScript ファイル「functions.jsscript.js」を作成します。

index.html

このファイルは、2 つの数値の和、差、積、商を表示するために使用され、script タグで 2 つの JavaScript ファイルにリンクされています。index を開きます。 html そして、次のコードを追加します。

index.html

nbsp;html>

  
    <meta>
    <meta>

    <title>JavaScript Modules</title>
  

  
    <h1 id="Answers">Answers</h1>
    <h2>
<strong></strong> and <strong></strong>
</h2>

    <h3 id="Addition">Addition</h3>
    <p></p>

    <h3 id="Subtraction">Subtraction</h3>
    <p></p>

    <h3 id="Multiplication">Multiplication</h3>
    <p></p>

    <h3 id="pision">pision</h3>
    <p></p>

    <script></script>
    <script></script>
  
ログイン後にコピー
このページは非常に簡単なので、詳細は説明しません。

functions.js

ファイルには、2 番目のスクリプトで使用される数学関数が含まれています。ファイルを開いて、次の内容を追加します:

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

を開いてすべての結果を確認します:

#いくつかの小さなスクリプトのみを必要とする Web サイトの場合、これはコードを整理する効果的な方法ですが、この方法にはいくつかの問題があります。グローバル名前空間モジュール、JavaScript のインポートとエクスポートを見てみましょう: スクリプトで作成したすべての変数 (

sum

difference
    など) は、
  • window オブジェクトに存在します。別のファイル変数で sum という名前の別の変数を使用すると、すべて同じ window.sum 変数を使用するため、スクリプト内の他の場所でどの値変数が使用されているかを知るのが難しくなります。変数をプライベートにする唯一の方法は、変数を関数のスコープに置くことです。DOM 内の x という名前の id であっても、var x と競合する可能性があります。 #依存関係管理: 正しい変数が使用されるようにするには、スクリプトを上から下にロードする必要があります。スクリプトを別のファイルとして保存すると、分離されているように見えますが、本質的にはスクリプトを別のファイルに配置するのと同じです。ページ上の単一の .
  • ES6 が JavaScript 言語にネイティブ モジュールを追加する前に、コミュニティはいくつかのソリューションを提供しようとしました。最初のソリューションはネイティブで書かれていました。 JavaScript 。オブジェクトまたは即時呼び出し関数式 (IIFE) 内にすべてのコードを記述し、それらをグローバル名前空間内の単一のオブジェクトに配置するなど。これはマルチスクリプトのアプローチよりも改善されていますが、少なくとも 1 つのオブジェクトをグローバル名前空間に入れるという問題が依然としてあり、サードパーティ間でコードを一貫して共有するという問題はそれほど簡単にはなりません。
  • その後、いくつかのモジュール ソリューションが登場しました: CommonJS は Node.js に実装された同期メソッド、Asynchronous Module Definition (AMD) は非同期メソッド、そして前の 2 つのスタイルをサポートする一般的なメソッドがあります。ユニバーサル モジュール定義 (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>
</script>
<script>
</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)一起配合使用,用来增加对浏览器的支持和附加功能,但它们也可以直接用在浏览器中。

接下来探索更多使用 importexport 语法的方式。

命名导出

如前所述,使用 export 语法允许你分别导入按名称导出的值。以这个 function.js 的简化版本为例:

functions.js

export function sum() {}
export function difference() {}
ログイン後にコピー

这样允许你用花括号按名称导入 sumdifference

script.js

import {sum, difference} from './functions.js'
ログイン後にコピー

也可以用别名来重命名该函数。这样可以避免在同一模块中产生命名冲突。在这个例子中,sum 将重命名为 add,而 difference 将重命名为 subtract

script.js

import {
  sum as add,
  difference as subtract
} from './functions.js'

add(1, 2) // 3
ログイン後にコピー

在这里调用 add() 将产生 sum() 函数的结果。

使用 * 语法可以将整个模块的内容导入到一个对象中。在这种情况下,sumdifference 将成为 mathFunctions 对象上的方法。

script.js

import * as mathFunctions from './functions.js'

mathFunctions.sum(1, 2) // 3
mathFunctions.difference(10, 3) // 7
ログイン後にコピー

原始值、函数表达式和定义、异步函数、类和实例化的类都可以导出,只要它们有标识符就行:

// 原始值
export const number = 100
export const string = 'string'
export const undef = undefined
export const empty = null
export const obj = {name: 'Homer'}
export const array = ['Bart', 'Lisa', 'Maggie']

// 函数表达式
export const sum = (x, y) => x + y

// 函数定义
export function difference(x, y) {
  return x - y
}

// 匿名函数
export async function getBooks() {}

// 类
export class Book {
  constructor(name, author) {
    this.name = name
    this.author = author
  }
}

// 实例化类
export const book = new Book('Lord of the Rings', 'J. R. R. Tolkein')
ログイン後にコピー

所有这些导出都可以成功被导入。接下来要探讨的另一种导出类型称为默认导出。

默认导出

在前面的例子中我们导出了多个命名的导出,并分别或作为一个对象导入了每个导出,将每个导出作为对象上的方法。模块也可以用关键字 default 包含默认导出。默认导出不使用大括号导入,而是直接导入到命名标识符中。

functions.js 文件为例:

functions.js

export default function sum(x, y) {
  return x + y
}
ログイン後にコピー

script.js 文件中,可以用以下命令将默认函数导入为 sum

script.js

import sum from './functions.js'

sum(1, 2) // 3
ログイン後にコピー

不过这样做很危险,因为在导入过程中对默认导出的命名没有做任何限制。在这个例子中,默认函数被导入为 difference,尽管它实际上是 sum 函数:

script.js

import difference from './functions.js'

difference(1, 2) // 3
ログイン後にコピー

所以一般首选使用命名导出。与命名导出不同,默认导出不需要标识符——原始值本身或匿名函数都可以用作默认导出。以下是用作默认导出的对象的示例:

functions.js

export default {
  name: 'Lord of the Rings',
  author: 'J. R. R. Tolkein',
}
ログイン後にコピー

可以用以下命令将其作为 book 导入:

functions.js

import book from './functions.js'
ログイン後にコピー

同样,下面的例子演示了如何将匿名箭头函数导出为默认导出:

functions.js

export default () => 'This function is anonymous'
ログイン後にコピー

可以这样导入:

script.js

import anonymousFunction from './functions.js'
ログイン後にコピー

命名导出和默认导出可以彼此并用,例如在这个模块中,导出两个命名值和一个默认值:

functions.js

export const length = 10
export const width = 5

export default function perimeter(x, y) {
  return 2 * (x + y)
}
ログイン後にコピー

可以用以下命令导入这些变量和默认函数:

script.js

import calculatePerimeter, {length, width} from './functions.js'

calculatePerimeter(length, width) // 30
ログイン後にコピー

现在默认值和命名值都可用于脚本了。

总结

模块化编程设计允许我们把代码分成单个组件,这有助于代码重用,同时还可以保护全局命名空间。一个模块接口可以在原生 JavaScript 中用关键字 importexport 来实现。

以上がモジュール、JavaScript のインポートとエクスポートを見てみましょうの詳細内容です。詳細については、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)

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 Dec 17, 2023 am 09:39 AM

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

JavaScriptでinsertBeforeを使用する方法 JavaScriptでinsertBeforeを使用する方法 Nov 24, 2023 am 11:56 AM

使用法: JavaScript では、insertBefore() メソッドを使用して、DOM ツリーに新しいノードを挿入します。このメソッドには、挿入される新しいノードと参照ノード (つまり、新しいノードが挿入されるノード) の 2 つのパラメータが必要です。

JavaScript と WebSocket: 効率的なリアルタイム画像処理システムの構築 JavaScript と WebSocket: 効率的なリアルタイム画像処理システムの構築 Dec 17, 2023 am 08:41 AM

JavaScript は Web 開発で広く使用されているプログラミング言語であり、WebSocket はリアルタイム通信に使用されるネットワーク プロトコルです。 2 つの強力な機能を組み合わせることで、効率的なリアルタイム画像処理システムを構築できます。この記事では、JavaScript と WebSocket を使用してこのシステムを実装する方法と、具体的なコード例を紹介します。まず、リアルタイム画像処理システムの要件と目標を明確にする必要があります。リアルタイムの画像データを収集できるカメラ デバイスがあるとします。

See all articles