摘要:同時又給出了另外兩個變量聲明的關鍵字和。聲明變量與一樣,也是用來聲明變量的,但它有著更好的作用域規則。另外一個值得注意的是,不能重復聲明變量報錯聲明變量與不同之處在于,聲明的變量只可以在聲明時賦值,不可隨意修改,否則會導致語法錯誤。
作用域說明
在es6之前我們我們聲明一個變量用var如:
var a = 1; var arr = [1,2,3]; ...
es6之前呢javascript沒有塊級作用域,如何來理解呢:就是在代碼塊里聲明的變量會“變量提升”至就近的函數作用域頂部或全局當中。如我們熟悉的for循環:
for( var i=0; i<10; i++){ console.log(i) } # 提升到全局,相當于 var i; for(i=0; i<10; i++){ console.log(i) } function test (){ ..... for( var i=0; i<10; i++){ console.log(i) } } # 提升到函數作用域頂部,相當于 function test (){ var i; ..... for(i=0; i<10; i++){ console.log(i) } }
在es6中給出了塊級作用域的概念:{}所包涵的代碼塊就是一個作用域。同時又給出了另外兩個變量聲明的關鍵字:let和const。
let聲明變量let與var一樣,也是用來聲明變量的,但它有著更好的作用域規則。來看幾個栗子:
function test1(){ for(var i=1;i<3;i++){ console.log(i); } console.log(i); // 3 } test1(); function test2(){ for(let i=1;i<3;i++){ console.log(i); } console.log(i); // 報錯了 } test2();
執行test1的時候,由于變量提升了所已外面的log能找到i,而test2用的let聲明的變量,在for循環的代碼塊內生效,for循環結束后變量被銷毀,被垃圾回收機制回收。所以會報錯。
let另外一個值得注意的是,不能重復聲明變量:
let a = 1; let a = 3; // 報錯 Uncaught SyntaxError: Identifier "a" has already been declaredconst聲明變量
與let不同之處在于,const聲明的變量只可以在聲明時賦值,不可隨意修改,否則會導致語法錯誤。
const PI=3.1415926; //ok const G; G = 9.8; // SyntaxError: Missing initializer in const declaration const MODIFY = 1; MODIFY = 2; // TypeError: Assignment to constant variable.
上面可以看到聲明的時候必須賦值否則回報沒有初始化的錯誤,已賦值的常量再次賦值也會報錯。
我們怎么理解下面這段代碼呢
function test(){ const obj={ name: "lilei" } obj.age=20; console.log(obj); // {name: "lilei", age: 20} } test()
const聲明的變量不是不能修改嗎,這里怎么可以修改成功呢,我們知道對象是引用類型,我們修改的是值,而不是其引用,而const聲明的對象類型的變量保存的是其引用,所以是不矛盾的。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/84072.html
摘要:塊級作用域存在于函數內部塊中字符和之間的區域和塊級聲明用于聲明在指定塊的作用域之外無法訪問的變量。和都是塊級聲明的一種。值得一提的是聲明不允許修改綁定,但允許修改值。這意味著當用聲明對象時沒有問題報錯臨時死區臨時死區,簡寫為。 塊級作用域的出現 通過 var 聲明的變量存在變量提升的特性: if (condition) { var value = 1; } console.lo...
摘要:聲明的變量只在其所在的代碼塊內有效。只要在聲明之前使用這些變量,就會報錯。在語法上稱為暫時性死區有時候,會不經間遇到比較隱蔽的死區,不太容易被發現。不允許重復聲明不允許在相同的作用域內聲明同一個變量。一旦聲明,其值就不能再改變。 let && const let let聲明的變量只在其所在的代碼塊內有效。 { let a = 10; } console.log(a) //R...
摘要:循環遍歷對象自身的和繼承的可枚舉屬性不含屬性。返回一個數組,包含對象自身的所有屬性的鍵名。目前,只有對象方法的簡寫法可以讓引擎確認,定義的是對象的方法。showImg(https://user-gold-cdn.xitu.io/2019/5/21/16ada8456223b0e1); 1. 屬性的簡潔表示法 在ES6中 允許直接寫入變量和函數,作為對象的屬性和方法,使得代碼的書寫更為簡潔。...
摘要:屬性的簡潔表示法在中允許直接寫入變量和函數,作為對象的屬性和方法,使得代碼的書寫更為簡潔。循環遍歷對象自身的和繼承的可枚舉屬性不含屬性。返回一個數組,包含對象自身的所有屬性的鍵名。 showImg(https://segmentfault.com/img/remote/1460000019259004?w=1282&h=1920); 1. 屬性的簡潔表示法 在ES6中 允許直接寫入變量...
摘要:以往,在中聲明變量的唯一方式是使用關鍵字。這種行為會阻止變量被訪問,除非它們被聲明了。因此,將一個對象聲明為常量必須非常小心。之中,頂層對象的屬性與全局變量是等價的。從現在開始,建議放棄使用,改為使用和。 以往,在 JavaScript 中聲明變量的唯一方式是使用關鍵字 var。為了理解為何添加了 let 和 const,我們先看一個示例,了解使用 var 會帶來怎樣的麻煩。 var ...
閱讀 3206·2021-11-25 09:43
閱讀 3211·2021-11-23 09:51
閱讀 3523·2019-08-30 13:08
閱讀 1575·2019-08-29 12:48
閱讀 3600·2019-08-29 12:26
閱讀 401·2019-08-28 18:16
閱讀 2568·2019-08-26 13:45
閱讀 2434·2019-08-26 12:15