JS - Block Scope
7547 ワード
Block Scope
ES 5変数として使用できるキーワードはvar
が一意であり、これは言語レベルで定数変数を提供しないことに関係する.
この問題を解決するために、ES 6は블록 스코프(block Scope)
とvar
を発売した.let
、const
、const
、if문
、for문
、while문
およびswitch-case문
と同じ文({}
)を追加のblock scope
と見なします.
例
/*** let, const ***/
if (true) {
let a = 10;
if (true) {
console.log(a); // undefined ----------------- 1번
const a = 20;
}
console.log(a); // 10
}
/****** var ******/
if (true) {
var a = 10;
if (true) {
console.log(a); // 10
var a = 20;
}
console.log(a); // 20
}
上記の例によれば、疑問が生じることがある.문({})
もblock scope
です.「最初の時点では、Scopeに値はありません.外部Scopeから値を検索して10を出力する必要がありますか?」この疑問.
これに対する答えはTDZの概念にある.まず、TDZはTemporal Dead Zone
の略であり、直訳して임시 사망 지역
、임시 사각 지대
となり、一定の意味を持つ抽象概念である.これは内部で相応のスコフ宣言だけを昇格させ、外部参照を阻止しundefined
を返還する.したがって、第1の時点では、const a
の宣言部分が対応するscopeの上部に昇格し、a
は外部から参照できず、undefined
が出力される.
ちなみに、TDZという用語は、ECMAスクリプトで正式に宣言された概念ではなく、開発者の間では無名の共通用語にすぎません.
this
ES 6では、他の중괄호({})
を使用することなく、this 바인딩
を使用することなく、중괄호({})
をオブジェクト内部で使用してコンテンツを囲むことができる./* 기존 */
let value = 0;
let obj = {
value: 5,
setValue: function () {
this.value = 10;
(function () {
this.value = 20; // 여기서 this는 window를 가리킴
}).call(this); // 때문에 this 바인딩을 추가로 해줘야함
}
};
let value = 0;
let obj = {
value: 5,
setValue: function () {
this.value = 10;
{
this.value = 20; // 외부의 this와 동일한 this를 가리킴
}
}
};
リファレンス
/*** let, const ***/
if (true) {
let a = 10;
if (true) {
console.log(a); // undefined ----------------- 1번
const a = 20;
}
console.log(a); // 10
}
/****** var ******/
if (true) {
var a = 10;
if (true) {
console.log(a); // 10
var a = 20;
}
console.log(a); // 20
}
/* 기존 */
let value = 0;
let obj = {
value: 5,
setValue: function () {
this.value = 10;
(function () {
this.value = 20; // 여기서 this는 window를 가리킴
}).call(this); // 때문에 this 바인딩을 추가로 해줘야함
}
};
let value = 0;
let obj = {
value: 5,
setValue: function () {
this.value = 10;
{
this.value = 20; // 외부의 this와 동일한 this를 가리킴
}
}
};
Reference
この問題について(JS - Block Scope), 我々は、より多くの情報をここで見つけました https://velog.io/@leo-xee/JS-Block-Scopeテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol