var,let,const的區別
一、var宣告的變數會掛載在window上,而let和const宣告的變數不會
二、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;
三、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這個變數
四、同一作用域下let和const不能宣告同名變數,而var可以
五、暫存死區
ES6 明確規定,如果區塊中存在let和const命令,這個區塊對這些命令宣告的變數,從一開始就形成了封閉作用域,凡是在宣告之前就使用這些變數,就會報錯,
總之,在代碼塊內,使用let命令宣告變數之前,該變數都是不可用的,這在語法上,稱為“暫時性死區”,(簡稱TDZ)
var a = 100;
if(1){
a = 10;
//在當前塊作用域中存在a使用let/const宣告的情況下,宣告前給a賦值,所以控制臺Error:a is not defined
let a = 1;
}
六、const
一般用來定義常量,當變數是復合型資料(物件,陣列),變數指向資料的記憶體地址,保存的只是一個指向實際資料的指標,const只能保證這個指標是固定的(即總是指向另一個固定的地址),至于它指向的資料結構是不是可變的,就完全不能控制了,因此,將一個物件宣告為常量必須非常小心,(重點)
/*
* 1、一旦宣告必須賦值初始化,不能使用null占位,
*
* 2、宣告后不能再修改
*
* 3、如果宣告的是復合型別資料,可以修改其屬性
*/
const obj = {a:100};
obj.name = 'apple';
obj.a = 10000;
console.log(obj); // {a:10000,name:'apple'}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/165420.html
標籤:JavaScript
上一篇:JS之Math.sin與Math.cos介紹及應用-實作滑鼠點擊后的煙花效果
下一篇:用原生JS寫根據時間顯示問候語
