天天看點

了解 ES6 中 var、let 和 const 的範圍

了解 ES6 中 var、let 和 const 的範圍

了解 ES6 中的全局、本地和塊級作用域

發病前 ES2015(ES6) , 這

曾是

statement 是在 JavaScript 中聲明變量的唯一選項。然而,由于

常量

在 ES6 中添加,這已經改變,并且

曾是

現在很少使用了。此外,使用還有一些好處

常量

超過

曾是

我們将在這篇文章中通過檢查它們在範圍方面的差別來進行介紹。

範圍

範圍隻是指使用這些變量的區域。在 ES6 之前,隻有兩個作用域: 全局和局部/功能範圍 .然而, 塊範圍 ,這是範圍

常量

現在可以在 ES6 中使用。讓我們用一個例子來進一步了解這三個作用域。

全球範圍

變量的範圍被稱為 全球的 如果

曾是

變量被聲明 在函數之外 .

**變量年齡 = 28;** 功能問候(){  
 var message = “你好”;  
 控制台.log(消息); // 你好  
 } **控制台.log(年齡); // 28**
           

這裡,

年齡

是 全球 作用域是因為它是在函數外部聲明和定義的,是以可以從整個視窗中的任何位置通路。

本地/功能範圍

一個

曾是

變量有 功能範圍 如果它是在函數内部定義的。

變量年齡 = 28; 功能問候(){  
  **var message = “你好”;**  
 控制台.log(消息); // 你好  
 } **控制台.log(消息); // ReferenceError: 消息未定義**
           

在上面的代碼中,如果我們嘗試通路

資訊

變量外

迎接

函數然後是 參考誤差 被退回。這是因為變量的範圍僅限于定義它的函數。是以,它不能從函數外部通路。雖然,在函數中,它确實列印了消息 功能範圍 .

塊範圍

塊是由 {} 分隔的一段代碼,代碼所在的位置。

**讓年齡= 28;** 如果真實) {  
  **讓年齡= 30;**  
  **讓消息=“你好”;**  
 控制台.log(年齡); // 30  
 } 控制台.log(年齡); // 28  
 控制台.log(消息); // ReferenceError: 消息未定義
           

在 ES6 中,

常量

兩者都有 塊級作用域 .在上面的例子中,我們有兩個

聲明的變量 一樣的名字 IE

年齡,

内部和外部

如果

堵塞。

什麼時候我們

控制台日志

同樣,我們看到兩者都列印不同的值。這是因為兩者都有自己的 塊範圍 .

此外,該

資訊

内部聲明的變量

如果

堵塞 不能在塊外通路 并傳回錯誤。這表明該範圍

資訊

變量是 限制在

**如果**

僅塊,它是塊級範圍 .當我們聲明一個

或者

常量

函數内部或作為函數一部分的代碼塊内部的變量。

“var”的問題

有 一個問題 我們看到的

曾是

.你能在下面的代碼中識别它嗎?

**變量年齡 = 28;** 如果真實) {  
  **變量年齡 = 30;**  
 控制台.log(年齡); // 30  
 } 控制台.log(年齡); // 30
           

如果我們檢視上面的示例,它與我們使用的代碼相同

我們的變量 塊範圍 例子。但是,這裡的輸出是不同的,因為兩者

控制台日志

印刷

30

代替

28

&

30

不像

變量。

這是我們看到的主要問題之一

曾是

在哪裡 覆寫 下一個

曾是

用 聲明的變量 一樣的名字 在不屬于函數的塊内。 這是因為

**曾是**

在不屬于函數的塊内聲明的變量将獲得全局範圍 .

是以,在 ES6 之後,使用

曾是

大部分被避免,并且

常量

被使用。雖然,

曾是

ES6 仍然支援不支援最新 ES6 功能的舊代碼和浏覽器。

感謝您的閱讀。

版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協定,轉載請附上原文出處連結和本聲明

本文連結:https://www.qanswer.top/20720/39100700