var與let、const的區別

var與let、const

1、var聲明的變量會掛載在window上,而let和const聲明的變量不會:

var a = 100;
console.log(a,window.a); // 100 100

let b = 10;
console.log(b,window.b); // 10 undefined

const c = 1;
console.log(c,window.c); // 1 undefined

2、var聲明變量存在變量提高,let和const不存在變量提高

console.log(a); // undefined  ===>  a已聲明還沒賦值,默認獲得undefined值
var a = 100;
console.log(b); // 報錯:b is not defined  ===> 找不到b這個變量
let b = 10;
console.log(c); // 報錯:c is not defined  ===> 找不到c這個變量
const c = 10;

3、let和const聲明造成塊做用域

if(1){
var a = 100;
let b = 10;
}

console.log(a); // 100
console.log(b) // 報錯:b is not defined ===> 找不到b這個變量
if(1){
var a = 100; const c = 1; }
console.log(a);
// 100 console.log(c) // 報錯:c is not defined ===> 找不到c這個變量

4、同一做用域下let和const不能聲明同名變量,而var能夠

var a = 100;
console.log(a); // 100

var a = 10;
console.log(a); // 10
 
 
let a = 100;
let a = 10;

// 控制檯報錯:Identifier 'a' has already been declared ===> 標識符a已經被聲明瞭。

5、暫存死區

 
 
var a = 100;

if(1){
a = 10;
//在當前塊做用域中存在a使用let/const聲明的狀況下,給a賦值10時,只會在當前做用域找變量a,
// 而這時,還未到聲明時候,因此控制檯Error:a is not defined
let a = 1;
}

6、const

 
 
/*
*   一、一旦聲明必須賦值,不能使用null佔位。
*
*   二、聲明後不能再修改
*
*   三、若是聲明的是複合類型數據,能夠修改其屬性** */const a = 100; const list = [];list[0] = 10;console.log(list);  // [10]const obj = {a:100};obj.name = 'apple';obj.a = 10000;console.log(obj);  // {a:10000,name:'apple'}
相關文章
相關標籤/搜索