一壺茶、一首歌、勾起了我想寫文章的熱情,今天就談一談es6裡變數宣告的方式的區別吧
首先宣告變數的常用方式有var、let、const三種
結合var來解釋一下let/cosnt:
1.使用let/const宣告的變數只在塊級作用與有效;var 不是
2.使用let/const 宣告的變數在當前作用域下是唯一的;var 不是
3.使用let/const宣告的變數是不存在變數提公升的;var 不是
4.使用let/const宣告的變數是會存在暫時性死區域的;var 不會
5.const其實是用來定義常量的,其定義的值是不能被改變的(說法不太準確,不讓你變你就別變就完了,不然就違背作者的一片初心了)
6.const定義的變數必須要在定義的時候同時賦值
什麼是塊級作用域?
首先全域性作用域是最大的塊級作用域,另外的就是
(1)函式塊
function()
for(let a=0)
等上**吧:
if(true) } //這裡無效})
再來解釋下 使用let/const 宣告的變數在當前作用域下是唯一的
直接上**行吧
eg: //報錯 //報錯 //報錯 所以結合1.講的塊作用域,就別再同一塊作用域下定義相同變數了
可以這樣 這裡就產生了兩個塊作用域。這裡要講一下最裡邊等於8的那個a,會封閉塊級作用域環境,就跟地頭蛇似的,在我的區域內,只有我說了算,不管是定義前還是定以後,這個花括號內部只能我這乙個a存在,那麼根據這種情況,很容易理解為何造成的暫時性死區了
造成暫時性死區的原因1.封閉的環境2.不存在變數提公升
結合上邊**,等於8的a封閉了裡邊那個花括號的環境,外邊定義的變數進不來的,所以:
var a=9;
let b=9;
console,log(a)//9;console,log(b)//9
console,log(a)//報錯:a is not defined;console,log(b)//報錯:b is not defined 這就造成了暫時性死區了(1.封閉的環境2.不存在變數提公升)
let a=8;
let b=8;
console,log(a)//8;console,log(b)/8
關於變數提公升的問題可以去查一下v8引擎執行js的原理,簡單的提示一下會分為go(全域性物件)ao(區域性物件)…自己去查查吧,很有意思
const定義常量的
在這裡首先要知道什麼叫基本資料型別,如果不知道建議去查一下瀏覽器的記憶體機制
首先const定義的變數是不可以被改變的,但是這個僅限於描述定義的基本資料型別(number、string、布林型)像(function、array、object)這樣的其實是可以被改變的,但是這並不是const想做的事,所以你也就別去糾結這個事了,你別變就是了,這裡你還要去看一下瀏覽器的記憶體機制,(基本資料型別可直接賦值在變數上,像function、array、object這樣的只是把乙個位址賦值給了變數,具體自己去查吧)
const a=8;
const b=;
a=7 //報錯
b.push(1) //[1]
const定義常量時不同時賦值的話會報錯
const a; //報錯
let a;不報錯
什麼時候用let?
es6建議用let代替var,所以什麼時候用var就什麼時候用let
什麼時候用const?
定義常量並且不想改變它的時候用const,比如使用import引入檔案時就可以用這玩意
好了,全部手敲的,中午都沒去吃飯,給個贊唄,還請大佬指點,本人善於虛心請教
ES6 let,const 用法雜談
es6 ecma 標準 發布於2015年6月 作用域 var 全域性 let 函式作用域 也叫塊級作用域 用 表示 let使用注意點 1.沒有預解析,不存在變數提公升。例 如果console.log a 在我們定義的let a 之前的話就報錯,而var 定義的則是undefined.console....
前端基礎ES6 let const
let具有作用域的 示例 lang en charset utf 8 name viewport content width device width,initial scale 1.0 documenttitle head var 宣告的變數往往會越域 let宣告的變數有嚴格的作用域 consol...
ES6 let const與作用域
一 let1.1 學習let,首先我們來看一段 function test console.log i 3 test 複製 這組 中,我們使用的是var來宣告變數來迴圈,所以在迴圈內列印出1,2。在迴圈外列印出3,這個應該都是可以理解的。下面來看下let的區別 function test conso...