[英]JavaScript const and let scoping syntax validity
以下是有效的 JavaScript 嗎?
const x = 1;
if(x){
const x = 2;
console.log(x); // 2
}
console.log(x); // 1
就像在內部塊范圍內將x
重新定義為const
(或let
)一樣?
不允許重新定義為var
,因為這會被提升到頂級范圍,然后與原始x
聲明發生沖突。
我想我在這里是對的,對吧? 允許以這種方式重新定義嗎? 所有主要的 JS 引擎都支持這個嗎?
是的,該塊是有效的,因為變量 shadowing 。
第二次聲明x
,它會在內部作用域中聲明,並且會隱藏外部作用域中所有同名的變量。
這允許您為變量指定您喜歡的名稱,而不必擔心外部庫或上面的某個地方是否有同名的變量。
例如,您可以多次為一個索引聲明let i
。 如果你不能,你應該只聲明一次let i
,然后在所有其他時間使用i = ...
。
但是,如果將來您決定不需要在外部作用域中使用let i
,則可以刪除它而無需過多考慮后果,並且i = ...
將成為全局變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.