1. 作用域不同
let 局限于代碼塊; var 整個(gè)函數(shù)
if(true){
var str = 1
let str1 = 2
console.log(str)
console.log(str1)
}
console.log(str)
console.log(str1)// str1 is not defined
2. let聲明的作用域不會(huì)被提升
console.log(str)
var str = 1
console.log(str1) // str1 is not defined
let str1 = 2
3. let同一作用域下不能定義相同的變量
var str = 1
var str = 11
console.log(str)//覆蓋上一個(gè)定義的變量
let str1 = 2
let str1 = 22
console.log(str1)//'str1' has already been declared
4. 對(duì)于沒(méi)有塊級(jí)作用域的for 、if 使用var會(huì)產(chǎn)生問(wèn)題
5. let與const
const修飾的標(biāo)識(shí)符為常量,不可再次賦值
const a = 5
a = 10 // 錯(cuò)誤, 不可以修改
const a // 錯(cuò)誤,const修飾的標(biāo)識(shí)符必須賦值
開(kāi)發(fā)中優(yōu)先使用const,可變的再使用let
常量的含義是指向的對(duì)象不能修改,但對(duì)象的屬性可以修改。
總結(jié)
var屬于js設(shè)計(jì)缺陷
開(kāi)發(fā)中不變的常量使用const修飾, 可變的使用let修飾 ,不使用var