摘要:塊級作用域綁定變量聲明的變量聲明與其他的一些計算機語言不同,在類的語言中,變量總是在被聲明的地方創建而在中變量創建的位置取決于你如何聲明它,為我們提供了新的聲明方式用來讓開發者能夠更好的控制變量的作用域我們通過聲明的變量,無論其聲明位置在哪
塊級作用域綁定 1.變量聲明
JS的變量聲明與其他的一些計算機語言不同,在類C的語言中,變量總是在被聲明的地方創建;而在JS中變量創建的位置取決于你如何聲明它,ES6為我們提供了新的聲明方式用來讓開發者能夠更好的控制變量的作用域;
我們通過var聲明的變量,無論其聲明位置在哪里,都會編譯器視為聲明在所在函數的頂部,如果不在任何函數內,則默認為全局作用域的頂部,這就是我們常說的變量的提升。
但這種獨特方式有的時候會引發一些bug問題,因為當變量提升的時候雖然已經聲明但是并未賦值,所以值是undefined,如果新手不熟悉JS的這種行為,就會引發一些問題,為了避免這種情況,ES6為我們提供了一種新的聲明方式叫做let;
1.1 let聲明所謂塊級聲明就是除去指定的塊的作用域外,任何地方都無法訪問到你所聲明的變量,C語言以及很多類C語言都有這個機制。
那么關鍵問題是如何創造一個塊級哦就是作用域呢?
在ES6中規定有在以下的情況下是可以創建塊級作用域的:
在函數內部;
在一對代碼塊之間(也就是由一對花括號所包裹的)內部;
ES6為了我們提供了新的聲明方式let,理論上來說,你可以用let來代替var來聲明變量,但是let所聲明的變量只作用域當前塊級作用域內,這點要注意,另外一個重點就是let并不會將你所聲明的變量提升到頂部,所以在使用let聲明變量時,需要注意將let聲明的變量手動寫到當前塊級作用域的頂部;
例如:
function letTEST(boo){ if(boo){ let value = true; } return value; }
參考以上代碼,當傳參的值為true的時候會聲明一個變量value;但是由于let聲明的變量只會在當前作用域內才能被訪問,所以return value的時候會報錯,以上代碼應當更改為如下
function letTEST(boo){ if(boo){ let value = true; return value; }else{ return null } }
考慮另一個場景:
{ let a = 10; let a = 20; }
以上代碼在運行時依然會報錯,所以我們可以得出一個結論就是在當前塊級作用域內,let不能重復聲明變量,那么這是為何呢
這里就說let聲明變量的機制問題了,當引擎執行當前代碼塊讀取到let的時候會將let所聲明的變量提升到一個封閉區間,我們稱之為TDZ(暫時性死區),這個區域內,不允許存在相同的變量名 所以重復使用let聲明瀏覽器會報錯;
1.2 const聲明在ES5以及之前的標準中,所有的變量都是可以被改變的,所以當我們需要聲明一個常量的以后,需要避免聲明相同標識符的變量以避免改變常量,但是也可能會不小心改變了這個變量,為了糾正這種不可靠的常量聲明方式,ES6引入了const來聲明常量;
const聲明變量的方式與let幾乎相同,唯一一點不同的地方在于const所聲明的變量是不可更改的,所以我們稱之為常量,看以下代碼:
const a = 10; a = 20;
以上代碼在瀏覽器中運行的時候,引擎會報錯,所以我們可以得知const聲明的變量的值是不可更改的,正式由于這個原因,所以在我們利用const聲明變量的時候必須要賦值,如果在聲明的時候不賦值的話,引擎依然會拋出錯誤;
通過以上測試我們可以的值const聲明變量不可更改,但是當我們使用const聲明對象的時候,更改對象的值卻不會報錯,看以下代碼:
const a = { name = "lucy" } a.name = "blank" //運行正常 a = { name = "leo" //報錯 }
那么我們通過以上代碼測試可知,const會阻止變量綁定以及變量本身的值得更改,并不會對其中的變量成員的更改做出合理的反應,這點很重要
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/84962.html
摘要:外層作用域不報錯正常輸出塊級作用域與函數聲明規定,函數只能在頂層作用域和函數作用域之中聲明,不能在塊級作用域聲明。規定,塊級作用域之中,函數聲明語句的行為類似于,在塊級作用域之外不可引用。同時,函數聲明還會提升到所在的塊級作用域的頭部。 前言:最近開始看阮一峰老師的《ECMAScript 6 入門》(以下簡稱原...
摘要:對比常量聲明與聲明常量聲明與聲明,都是塊級聲明。最后一點全局塊級綁定與不同于的另一個方面是在全局作用域上的表現。塊級綁定新的最佳實踐在的發展階段,被廣泛認可的變量聲明方式是默認情況下應當使用而不是。總結與塊級綁定將詞法作用域引入。 var變量與變量提升 使用var關鍵字聲明的變量,無論其實際聲明位置在何處,都會被視為聲明于所在函數的頂部(如果聲明不在任意函數內,則被視為在全局作用域的頂...
摘要:聲明聲明的語法與的語法一致。總結文章都是以深入理解讀書筆記形式,大部分引用書中的定義,加上作者的理解,樣例也做了調整,所有樣例都可以放到里運行親自嘗試。 1.變量提升 使用 var 關鍵字聲明的變量,無論其實際聲明位置在何處,都會被視為聲明于所在函數的 頂部(如果聲明不在任意函數內,則視為在全局作用域的頂部)。這句話從字面上不難理解。 但是他是怎樣一個過程,為什么會這樣。當你代...
摘要:允許在塊級作用域內聲明函數。上面代碼中,存在全局變量,但是塊級作用域內又聲明了一個局部變量,導致后者綁定這個塊級作用域,所以在聲明變量前,對賦值會報錯。 ES5的作用域 變量起作用的范圍,js中能創建作用域的只能是函數 { let a = 1; var b = 2; } console.log(a); // a is not defined console.log(b); //...
閱讀 3551·2021-10-09 09:43
閱讀 6149·2021-09-07 10:15
閱讀 2746·2019-08-30 14:03
閱讀 3074·2019-08-29 11:01
閱讀 1715·2019-08-29 10:56
閱讀 1074·2019-08-28 17:52
閱讀 3502·2019-08-26 11:42
閱讀 2547·2019-08-26 10:33