1. var,let,const
2726 ワード
モダンjavascriptコアガイド
varキーワードとして宣言された変数は、関数スキャンに依存します.
逆に、forループ(ブロックスキャン)内でvarキーワードで変数を宣言する場合は、forループの外でこの変数を使用することもできます.
第2の例では、varは関数の範囲内に制限され、関数の外部からアクセスできません.
すなわち、変数を宣言するブロックおよびそのサブブロックでのみ変数を使用できます.
逆に、
また、constオブジェクトを未知のオブジェクトコンテンツに固定することもできます.
今回議論する概念はTDZ(temporal dead zone一時無効領域)である.
var、let、constは、他のソースから読み取ることができるコンテンツですが、hoistingのターゲットです.
これは、コードが実行される前に処理され、対応するスキャンが行われることを意味します(グローバルでもブロックでも...).上へ行く.
すなわち、定義する前に未定義の値が存在する.
逆にletは,変数が線形に変化するまで非アクティブ領域(TDZ)に一時的に存在する.
したがって、初期化前に変数にアクセスするとエラーが発生します.
定義されていない値を取得するよりも、コードデバッグに適しているエラーが発生します.
1.1 var、let、constの違い
var
varキーワードとして宣言された変数は、関数スキャンに依存します.
逆に、forループ(ブロックスキャン)内でvarキーワードで変数を宣言する場合は、forループの外でこの変数を使用することもできます.
for( var i =0; i<10; i++) {
var leak = 'I am available outside of the loop':
}
console.log(leak);
// I am available outside of the loop
function myFunc() {
var functionScoped = 'I am available inside this function';
console.log(functionScoped);
}
myFunc()
//I am available inside this function
console.log(functionScoped)
// ReferenceError: functionScoped is not defined
第1の例では、varの値は、ブロックスキャンの外であってもforループの外でアクセスすることができる.第2の例では、varは関数の範囲内に制限され、関数の外部からアクセスできません.
let
let
(およびconst
)キーワードとして宣言される変数は、블록 스코프
に属する.すなわち、変数を宣言するブロックおよびそのサブブロックでのみ変数を使用できます.
// let 사용의 예
let x = 'global';
if ( x==='global') {
let x = 'block-scoped';
console.log(x);
//block-scoped
}
console.log(x)
// global
// var 사용의 예
var y = 'global'
if ( y == 'global') {
var y = 'block-scoped';
console.log(y);
// block-scoped
}
console.log(y);
// block-scoped
上記の例に示すように、ブロックスキャン内でlet
と宣言された変数に新しい値を指定すると、この値はブロック外で一定に保たれる.逆に、
var
と宣言された変数に対して同じ操作を実行すると、ブロックスキャン外部からアクセスできるため、ブロック外部でも値の変更が見られる.const
let
と同様に、const
と宣言された変数もブロックスキャンに属しますが、差異がある場合は、変更値の再割り当てや値の再宣言はできません.const constant = 'i am a constant';
const = 'i can't man'
// Uncaught TypeError: Assignment to constant variable
ここで注意したいのは、constと宣言された変数が不眠症を意味するわけではないことです.constにオブジェクトが含まれている場合は?
const person = {
name: 'shin',
age : 27,
},
person.age = 26
console.log(person.age)
//26
この場合、問題は変数全体を再割り当てすることではなく、属性の1つだけを再割り当てすることです.また、constオブジェクトを未知のオブジェクトコンテンツに固定することもできます.
TDZ
今回議論する概念はTDZ(temporal dead zone一時無効領域)である.
console.log(i);
var i = 'i am kim'
//undefined
console.log(j);
let j = 'i am kim'
//ReferenceError: cna't access lexical declaration ....
var
は、定義の前にアクセスできますが、その値にアクセスできません.let
とconst
は定義するまで近づけないvar、let、constは、他のソースから読み取ることができるコンテンツですが、hoistingのターゲットです.
これは、コードが実行される前に処理され、対応するスキャンが行われることを意味します(グローバルでもブロックでも...).上へ行く.
var
の最大の違いは、定義する前に近づくことができることです.すなわち、定義する前に未定義の値が存在する.
逆にletは,変数が線形に変化するまで非アクティブ領域(TDZ)に一時的に存在する.
したがって、初期化前に変数にアクセスするとエラーが発生します.
定義されていない値を取得するよりも、コードデバッグに適しているエラーが発生します.
Reference
この問題について(1. var,let,const), 我々は、より多くの情報をここで見つけました https://velog.io/@kyle-shk/1.-varletconstテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol