es6 let const和var最完美的解釋

2021-09-29 10:56:46 字數 1939 閱讀 7368

一壺茶、一首歌、勾起了我想寫文章的熱情,今天就談一談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...