天天看點

js中let,const,var的差別(9.6)前言varletconst總結

前言

==在ES6出現之前,js中的聲明變量隻有var,然而在ES6後新增了let和const

var

1.如果用var聲明一個變量

在函數内就隻在函數内生效,如果在函數外就變成了全局生效

var a = 1; //此處聲明的變量a為全局變量
function foo(){
   var a = 2;//此處聲明的變量a為函數foo的局部變量
   console.log(a);//2
}
foo();
console.log(a);//1
           

2.如果在聲明變量

時省略var 的話就會變成全局變量,如果全局變量中已經有這個變量就會更新這個變量的值

這就叫變量提升

var a = 1; //此處聲明的變量a為全局變量
function foo(){
   a = 2;//此處的變量a也是全局變量
   console.log(a);//2
}
foo();
console.log(a);//2
           

注意:1.var聲明的變量存在提升,

2.注意隻有變量聲明才會提升,對變量指派并不會提升

3.如果對沒有聲明的變量列印控制台會報錯 沒有聲明

let

let聲明的變量有幾個特點

1.let聲明的變量具有塊級作用域

注意:此處可能擴充什麼說塊級作用域:簡單來說就是外層無法擷取到内層,即使外層和内層都使用相同變量名,也都各自不影響對方

2.let不存在變量提升,換一種說法,就是 let 聲明存在暫時性死區

3.在同一個作用域下不能重複聲明

注意::此處可能擴充什麼是暫時性死區:

隻要塊級作用域記憶體在let指令,它所聲明的變量就“綁定”這個區域,不受外部的影響。

const

const 聲明方式,除了具有 let 的特點外,還有一個特點, const 的變量,一旦定義後,就不能修改,即 const 聲明的為常量。

但是,并不是說 const 聲明的變量其内部内容不可變

總結

1.var 聲明的變量屬于函數作用域,let 和 const 聲明的變量屬于塊級作用域; 2.var 存在變量提升現象,而 let 和 const 沒有此類現象; 3.var 變量可以重複聲明,而在同一個塊級作用域,let 變量不能重新聲明,const 變量不能修改。

繼續閱讀