let變量聲明總結

let命令有四大主要特性:存在塊級做用域沒有變量提高暫時性死區不容許重複聲明函數

這都是和es5的var變量特性相反的。es5

 

一、存在塊級做用域spa

let命令聲明的變量只在其塊級做用域中有效,就是{}中。code

{ let a = 10; var b = 1; } console.log(a); //出錯 not defined
console.log(b); //1

es5中要實現塊級做用域,一般藉助當即執行匿名函數來實現:blog

(function(){ var a = 1; }()); console.log(a); //出錯,not defined

可是有了let以後,就像C語言同樣,直接就是:作用域

{ let a = 1; } console.log(a); //出錯, not defined

 

二、沒有變量提高io

也正因如此,變量必須在聲明後使用,不然會報錯。console

console.log(a); //出錯, not defined
let a = 1; 

對比var經典的變量提高function

console.log(a); //undefined
var a =1;

 

三、暫時性死區class

在塊級做用域內,若存在用let命令聲明的變量,則所在區塊對該變量造成封閉做用域,也就是該變量無視外部的同名變量。而又由於不存在變量提高,因此在該區塊中,不能在聲明前使用該變量。

var a  = 1; if(true){ a = 2; //出錯 not defined
 let a; }

對比var

var a = 1; if(true){ a = 2; //var容許重複聲明,並且變量提高,故a=2正常賦值
var a; }

 

四、不容許重複調用

let不能夠在相同做用域內重複聲明同一個變量,也包括不能和var,const變量名重複

let a = 1; let a = 1; //出錯 let不可重複聲明

var b = 1; let b = 1; //出錯 let不可重複聲明
 const c = 1; let c = 1; //出錯 let不可重複聲明
相關文章
相關標籤/搜索