変数の海(2)
Varを放棄しましょう。
let,constの前にvarを使用します.では、varとlet、constの違いは何でしょうか.コアはvarが関数scope,let,constを有するブロックレベルのscopeである.このほか、宣言、分配、護衛などの特徴も発見できる.
基本
var
let
const
きょうさ
var
ブロック内で変数を変更すると、グローバルスペース内の変数に変更されます.これはvarが関数単位スキャンを有するためである.
let, const
let/constは、変数の範囲をブロック単位で指定します.
グローバルスペースを最小化する理由
グローバルスペースは使えませんか?では、理由は何ですか.どこでも近づけるから.人は別れたと思っているが、結婚式の実行では別れない.核心は思いがけない間違いが起こるからだ.
したがって、グローバル変数はエラー防止策として使用されません.Windows/globalは操作しません.const/letを使用すると、varがグローバルに生成するデータを削減できます.根本
IIFE、Module、Closureでスキャンする方法があります.
グローバルスペース?
グローバルスペースは通常、最上位レベルを意味します.Windowsまたはglobalは、ブラウザ環境ではwindow、ノード環境ではglobalです.
どうして世界を侵害できないの?
JSは書類を分けられない.
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script src="./global.js"></script>
<script src="./global2.js"></script>
</body>
</html>
// global
var global = 'global';
console.log(console.log('global', global));
// global2
console.log('global2', global);
また、グローバルオブジェクトに登録されている機能と同じ名前の変数を宣言/割り当てた場合、この機能は上書きの問題に直面します.ブラウザコンソールでエラーが発生しますが、ノード環境ではエラーは発生しません.
// global
var global = 'global';
console.log(console.log('global', global));
var setTimeout = 'setTimeout';
// global2
console.log('global2', global);
setTimeout(() => {
console.log(1);
}, 1000);
がんばって
護衛は運行時に宣言と配分が分かれている.ランタイムタイミングとは、コードランタイムを意味します.Hoastingは、変数が正しく初期化されていない場合、未定義の最上位レベルに昇格できることを意味します.特にvarを使用する場合に発生する可能性があります.
var globa = 0;
function outer() {
console.log(global); // undeinfd > 선언과 할당이 분리된 상태
var global = 5;
function inner() {
var global = 10;
console.log(global); // 10
}
inner();
global = 1;
console.log(global); // 1
}
outer();
変数だけでなく、関数もハイライトされます.console.log(sum()); // 3
function sum() {
return 1 + 2;
}
解決策の1つは、関数式を使用することです.console.log(sum()); // Error
const sum = function() {
return 1 + 2;
}
ブートは、実行時に宣言を最上位レベルに昇格させることを意味します.問題は、コードの作成時に予測不可能な実行結果が発生する可能性があることです.これを避けるためにvarを使うべきではありません.また、関数もハイライトされるので、関数式でハイライトを防ぐことができます.let/cont宣言変数はエスケープされないものではありません.スキャンに入ると、変数が作成され、TDZ(Temporal Dead Zone)が生成されますが、コード実行が変数の実際の位置に達するまでアクセスできません.let/cont変数が宣言されると、制御フローはTDZから離れ、変数が使用可能になります.
TDZ(Temporal Dead Zone)
TDZは宣言前に変数へのアクセスを禁止します.
ソース
Reference
この問題について(変数の海(2)), 我々は、より多くの情報をここで見つけました https://velog.io/@leebonggu12/변수의-대해2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol