グローバル変数の問題
4802 ワード
既存のブログの内容をDevelopgに移行した記事です.
1.変数のライフサイクル
ゾーン変数のライフサイクル
ゾーン変数のライフサイクルは、関数のライフサイクルと一致します.
var a = "전역변수";
function local_test() {
console.log(a);
var a = "지역변수";
return a;
}
上のコードではconsole.log(a)出力undefined,関数内部のvar aこれは、まずhoistingとして宣言され、定義されていない場合に出力されるためです.
2.グローバル変数のライフサイクル
グローバル変数のライフサイクルは、グローバルオブジェクトのライフサイクルと一致します.
전역 객체:
런타임 이전에 자바스크립트 엔진에 의해 생기는 특수한 객체.
전역 객체에는 표준 빌트인 객체, 환경 호스트 객체들이 들어간다.
3.グローバル変数の問題
無名の結合
すべてのコードは、グローバル変数を参照および変更できます.
ロングライフサイクル
ライフサイクルが長いため、多くのリソースを消費し、価格を変更する可能性があります.
スキャンチェーンの終点に存在する
グローバル変数の検索が最も遅いため、変数の検索速度が最も遅い.
ネーミングスペース汚染
ファイルが切断されていても、グローバルスキャンが共有されます.
変数値が汚染される確率が高い.
4.グローバル変数を無効にする方法
インスタント実行関数
関数定義と同時に呼び出されるインスタント実行関数には、独立したスキャンがあります.
ネームスペースオブジェクト
方法は、グローバルにネーミングスペースロールのオブジェクトを作成し、グローバル変数を追加することです.しかし、ネーミングスペース自体はグローバル変数であるため、あまり役に立たない.
モジュールモード
変数とインスタント実行関数を使用してモジュールを作成します.グローバル変数を抑制したり、カプセル化したりすることができます.(Javaのpublic、private、protected)
const calc = (function () {
// private 변수
var num = 0;
// 외부로 공개할 데이터나 메소드
return {
sum(x, y) {
return x + y;
},
minus(x, y) {
return x - y;
},
};
})();
console.log(calc.sum(2, 3)); /// 5
ES 6モジュール
type=「module」ツリーをscriptラベルに追加すると、ロードされたJavaScriptファイルがモジュールとして動作します.
Reference
この問題について(グローバル変数の問題), 我々は、より多くの情報をここで見つけました https://velog.io/@seongkyun/전역-변수의-문제점テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol