JavaScript 中 var 和 let 和 const 關鍵字的區別


var與let、const的區別

在最新的 ES6 中,新添加了兩個用於變量聲明的關鍵字 let 和 const

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

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

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

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

二、var聲明變量存在變量提升,let和const不存在變量提升

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

三、let和const聲明形成塊作用域

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

四、同一作用域下let和const不能聲明同名變量,而var可以

1 var a = 100;
2 console.log(a); // 100
3 
4 var a = 10;
5 console.log(a); // 10
1 let a = 100;
2 let a = 10; //  控制台報錯:Identifier 'a' has already been declared  ===> 標識符a已經被聲明了。

五、暫存死區

1 var a = 100;
2 if(1){
3     a = 10;
4     //在當前塊作用域中存在a使用let/const聲明的情況下,給a賦值10時,只會在當前作用域找變量a,
5     // 而這時,還未到聲明時候,所以控制台Error:a is not defined
6     let a = 1;
7 }

六、const

 1 /*
 2 *   1、一旦聲明必須賦值,不能使用null占位。
 3 *   2、聲明后不能再修改
 4 *   3、如果聲明的是復合類型數據,可以修改其屬性
 5 * */
 6 
 7 const a = 'abc'; 
 8 
 9 const list = [];
10 list[2] = 'abc';
11 console.log(list);  //  [empty × 2, "abc"]
12 
13 const obj = {a:100};
14 obj.a = 'abc';
15 console.log(obj);  // {a:'abc'}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM