JavaScriptカーネルシンボル33(+ES 6)#8.IIFE, Modules and Namespaces
19183 ワード
IIFE
IIFEは、即時呼び出し関数式を表す.スキャン領域内の外部変数のアクセスを阻止し、すぐに呼び出すための関数を作成する場合に使用します.
2回目のように、関数宣言式をすぐに関数式に変換できます.でもこれ以上使えません.
3番目のように、関数式をすぐに作成できます.再利用可能です.やってみた
Module
当初,モジュール化システムはなかったが,絶えず発展するフロントエンド環境に適応するために,モジュールの重要性を認識し導入を試みた.現在のノード.jsはCommonJSのモジュールシステムを採用し,ES 6からJavaScriptが独自にモジュールシステムを導入した.CommonJSとAMDのNAVER D 2について
モジュールはローカルファイルでは動作せず、HTTPまたはHTTPSプロトコルのみで動作します.🤣
-Nodeのmodule:require.相対パスのファイル拡張子.js, .json, .nodeファイルを読み込むことができます. フォルダをパスとして指定した場合は、そのフォルダのインデックスファイルを参照してください. パスタグがない場合は、最上位パスから/node modulesフォルダを前面に配置し、ナビゲートします. 上位3ビットが見つからない場合は、OSグローバルファイルを参照してください. -browserのmodule:import.
ES 6はモジュール化システムを導入した.しかしIEが起動できないので2022年中旬まで待ちましょう.
importモジュールの特徴!😊モジュールは常に厳格なモードで動作します. モジュールには独自のスキャナーがあります.したがって、モジュール内で定義された変数または関数は、他のスクリプトからアクセスできません. は複数の場所で同じモジュールを使用しているが、モジュールは最初の呼び出し時に1回のみ実行される.実行後の結果は、このモジュールをインポートするすべてのモジュールに出力されます.たとえば、File 01でPropertyを変更すると、File 02でもPropertyが変更されます. import.metaオブジェクトは、現在のモジュールに関する情報を提供します. thisは未定義のものを出力します. file 01はmode 01の前にexportを追加し、すぐにエクスポートできます. requireのように集約およびエクスポートすることもできます. を一度に読み込む場合は、インポートモジュールの名前を指定する必要があります. インポートは、の一部のみをロードする場合、エクスポートの一部のみをロードできます.
*すべてのエクスポートをインポートできます.
Namespaces
ネーミングスペースとは、オブジェクトや変数が重ならないように安全なソースコードを作成することです.
JavaScriptでは、ネーミングスペースの機能はサポートされていません.しかし、ネーミングスペースのような効果を実現する方法はいくつかあります.
Namespaces_01. IIFEの使用
IIFEを使用すると、グローバル変数を減らすことができます.宣言後すぐに実行し、グローバルオブジェクトを汚染しません.
もう1つの方法は、インスタントオブジェクトの初期化です.
Namespaces_02. オブジェクトの操作
これは最も基本的な図案です.オブジェクトを作成したら、ここにすべてのオブジェクトを追加します.
IIFEは、即時呼び出し関数式を表す.スキャン領域内の外部変数のアクセスを阻止し、すぐに呼び出すための関数を作成する場合に使用します.
//1.
(function()){
console.log("Hello World!")
}()//Hello World!
//2.
(function func()){
console.log("Hello World!02")
}()//Hello World!02
func()//error
//3.
(func03 = function(x){
console.log(`Hello World! ${x}`)
})();//Hello World! undefined
func03("kim")//Hello World! kim
宣言と同時にIIFEを呼び出す.フィーチャーは関数名を省略できます.通常の関数式のようにハイライトされます.2回目のように、関数宣言式をすぐに関数式に変換できます.でもこれ以上使えません.
3番目のように、関数式をすぐに作成できます.再利用可能です.やってみた
Module
当初,モジュール化システムはなかったが,絶えず発展するフロントエンド環境に適応するために,モジュールの重要性を認識し導入を試みた.現在のノード.jsはCommonJSのモジュールシステムを採用し,ES 6からJavaScriptが独自にモジュールシステムを導入した.CommonJSとAMDのNAVER D 2について
モジュールはローカルファイルでは動作せず、HTTPまたはHTTPSプロトコルのみで動作します.🤣
-Nodeのmodule:require.
//file01.js
const mode = "kim";
module.exports = mode;
//------------------------------------
//file02.js
const mode = require('./file01.js')
console.log(mode)//kim
繰り返しエクスポートできます.関数もエクスポートされます.//file01.js
const mode01 = "kim";
const mode02 = function(){
return "lee"
}
module.exports = { mode01, mode02 }
//------------------------------------
//file02.js
const mode = require('./file01.js')
console.log(mode.mode01)//kim
console.log(mode.mode02)//kim
ES 6はモジュール化システムを導入した.しかしIEが起動できないので2022年中旬まで待ちましょう.
importモジュールの特徴!😊
<script type="module">
let user = "John";
</script>
<script type="module">
alert(user)//error
</script>
モジュールを使用する場合はtype=「module」を指定する必要があります.前述したように、モジュールレベルスキャンの開始は、独立した領域となる.alert(ユーザー)にエラーが発生した原因.//file01.js
export const mode01 = "kim";
const mode02 = "lee";
const mode03 = "park";
export mode02
//or 여러개 내보낼때 export {mode02, mode03}
//------------------------------------
//file02.js
import mode from "./file01";//export한거 객체 불러오기
import {mode02, mode03} from "./file01";//export 부분만 불러오기
console.log(mode.mode01)//kim
//file01.js
const mode01 = "kim";
export default mode01
//------------------------------------
//file02.js
import mode from "./file01";
console.log(mode)//kim
export defaultでは、モジュールファイルで指定した1つのみをエクスポートできます.//file01.js
export const mode01 = "kim";
export const mode02 = "lee";
//------------------------------------
//file02.js
import {mode01, mode02 as A , B}mode from "./file01";
import * All from "./file02";
console.log(mode)//kim
asで別名を指定できます.*すべてのエクスポートをインポートできます.
Namespaces
ネーミングスペースとは、オブジェクトや変数が重ならないように安全なソースコードを作成することです.
JavaScriptでは、ネーミングスペースの機能はサポートされていません.しかし、ネーミングスペースのような効果を実現する方法はいくつかあります.
Namespaces_01. IIFEの使用
IIFEを使用すると、グローバル変数を減らすことができます.宣言後すぐに実行し、グローバルオブジェクトを汚染しません.
var obj = (function func02(){
var say = "HI";
return console.log(say)
})();//Hi!
obj()
このように使用すると、IIFEのsay変数名が消えてしまうので、心配する必要はありません.もう1つの方法は、インスタントオブジェクトの初期化です.
({
name : "kim",
say(){
console.log(`HI ${this.name}`)
}
}).say()//hi kim
オブジェクトを使用すると、そのオブジェクトはすぐに消えます.Namespaces_02. オブジェクトの操作
これは最も基本的な図案です.オブジェクトを作成したら、ここにすべてのオブジェクトを追加します.
let container01 = {
A : 1,
B : 2,
subCon : {
C:3,
D(){
console.log("HI01")
}
}
}
let container02 = {
A : 1,
B : 2,
subCon : {
C:3,
D(){
console.log("HI02")
}
}
}
container01.A//1
container02.subCon.D()//HI02
学習の過程で、私がプロジェクトで使用しているCSSネーミングモードとよく似ていることがわかりました.例えばword pressは、このモードでCSSを作成しました.あとClassと文法も似ていますReference
この問題について(JavaScriptカーネルシンボル33(+ES 6)#8.IIFE, Modules and Namespaces), 我々は、より多くの情報をここで見つけました https://velog.io/@404/자바스크립트-핵심컨샙33ES6-8.-IIFE-Modules-and-Namespacesテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol