在之前的js版本中,宣告變數一直都是用var, 這個估計大家都很熟悉了。
那麼它的作用呢就是用來宣告乙個變數,比如像這樣子:
var a =
10
在這裡我們就用var宣告了乙個變數a 並且在宣告的同時給這個變數a賦值了 也就是10;
那麼這時候如果我們去引用這個變數,那麼得到的結果就是10,這沒什麼稀奇的,在這裡就不再贅述了。
那麼在es6裡面新增了兩個宣告變數的方法:
乙個是let,用於宣告變數。
乙個是const,用於宣告常量。
我們來看一下這三者之間的區別:
這兩個關鍵字都是用於宣告變數的,在這種情況(先宣告後使用)下使用let和var的時候其實是沒有區別的。
區別一:變數提公升
用var宣告的變數會被提公升,而用let宣告的變數不會被提公升。
不過呢,我們都知道var關鍵字宣告變數的時候有乙個東西,叫「變數提公升」;
也就是將變數宣告提公升到它所在作用域的最開始的部分,比如:
如果在宣告這個變數之前去引用這個變數,如果這個變數是用var進行宣告的,那麼得到的結果其實是undefined。
也就是為定義的意思,但是這個變數是存在的。
我們知道js在執行之前其實有乙個與解析的過程,所以上面**在js去進行解析的時候,其實變成了這樣:
可以看到變數a的宣告跑到console.log的前面去了,只是賦值還是在console.log之後進行賦值的。
console.log得到的結果就是undefined. 這就是所謂的變數提公升了。
這時候區別就來了:用var宣告的變數會被提公升,而用let宣告的變數不會被提公升。
也就是說:
在宣告之前去引用let宣告的變數會直接報錯,會直接阻斷程式的執行。
區別二:重複宣告
用var可以重複宣告同乙個變數,而let不可以。
我們知道,用var宣告乙個變數之後,其實還可以再次用var去宣告這個變數,不過是後者覆蓋前者,並沒有太大意義。
不過至少不會報錯,而如果用let去宣告變數的話,就得稍微注意一點,因為let不可以在同乙個作用域下重複宣告同乙個變數:
如果用let重複宣告同乙個變數,那麼這時候就會報錯:變數b已經被宣告了。
區別三:塊級作用域
用let宣告的變數支援塊級作用域
es6新提出來了乙個塊級作用域的概念,在之前,作用域只存在函式裡面,或者全域性。
而es6提出的塊級作用域則是乙個大括號就是乙個塊級作用域,也就是說if語句裡面都存在作用域概念了,比如:
const的特性
和let一樣,const也是es6新增的關鍵字,let用於宣告變數,而const用於宣告常量。
當然,const和let也有一些相同點:
然後我們再來說一下這兩個傢伙的不同點:
區別一:const宣告的常量不能被修改
正常來說,我們不管是用var宣告的變數,還是用let宣告的變數,後期都是可以對這個變數再次賦值的,也就是說可以修改。
而常量一旦定義了,後期就不能修改了。
如:一旦你嘗試著去修改乙個常量的時候,瀏覽器就會告訴你,常量不可以被修改!
不過有乙個方法是可以做到修改常量的,就是宣告常量的時候,給常量賦值乙個物件。
然後後期再去修改這個物件裡面的值就可以了,不過這麼做沒有任何的意義。
常量存在的意義就在於其不可更改性。
所以這個方法也就不再多說了
區別二:常量在宣告的時候,必須賦值
其實這一點特別好理解,常量在後期沒有辦法再次進行賦值,所以只能在宣告的時候進行賦值。
另外有一點要特別關注一下,比如:
所以在let變數宣告之前,對tmp的賦值會報錯。
es6中明確規定,如果區塊中存在let和const命令,這個區塊對這些命令宣告的變數。
從一開始就形成了封閉作用域,凡是在宣告之前就使用這些變數就會報錯。
那麼以上就是關於es6在變數宣告這一塊的小改動啦!
Es6之變數宣告
es6變數宣告let 和 canst,let 所宣告的變數具有塊級作用域,且宣告的變數不會前置,而const宣告的是不變了常量 let test test let 所宣告的變數只在塊級作用域內有效,而var就不同 for var i 1 i 5 i console.log str 輸出hello.c...
ES6 變數宣告方式
var,function,let,const,import,class1.let只在所在的 塊中有效 2.以前我們需要用iife解決的問題 3.不存在變數宣告提公升 4.暫時性死區tdz 1.let只在所在的 塊中有效 2.以前我們需要用iife解決的問題 3.不存在變數宣告提公升 console....
ES6之變數與解構賦值
變數宣告var 函式作用域 可以重新賦值,重新定義 let 塊級作用域 不能重新宣告,可以修改 const 塊級作用域 不能重新宣告,不能修改 常量 var 是全域性變數,for var i 0 i 10 i for let i 0 i 10 i 1000 script 變數提公升var命令會發生 ...