let var const理解記錄

變量聲明包括let  var const

在這之前,需要提一點:

如果一個變量沒有聲明直接被使用,那該變量自動會變爲全局變量。

i = 10; // i現在是全局變量

該缺陷是因爲 在js設計之初,爲了方便初學者而不要求強制申明變量導致的,

後面推出的strict模式修補了這一問題

在js代碼第一行寫上:  'use strict

它的作用是在聲明瞭之後,會嚴格檢測該文件內的變量是否通過var申明,若無則報錯

它們的區別如下:

對其中的概念解釋如下:

1、作用域 

作用域既是該值能夠生效,能夠被訪問的區域範圍。

var 爲全局作用域,let和const是局部作用域(僅在函數體內可用)

if(true) {
    var a = 1;
    let b = 2;
    const c = 3;
}

console.log(a); // a打印值爲1
console.log(b); // b打印值爲 undefined
console.log(c); // c打印值爲 undefined

2、變量聲明

var 和 let可以僅聲明不賦值,但是const必須賦值,否則會報錯

var a = 1 //正確
let b = 1 //正確
const c = 1 //正確

var d //正確 d打印爲undefined
let e //正確 e打印爲undefined
const f //錯誤

3、是否可修改

var 和let聲明的變量可隨意修改,const聲明的變量  若爲基礎類型(undefined null string number boolean)則不可修改,若爲引用數據類型(object array), 可以修改值, 不可修改引用對象。

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

let b = 1;
b = 2;
console.log(b) // 2

//c爲基本數據類型不可修改
const c = 1;
c = 2; //報錯

//d爲引用數據類型
const d = [1,2,3];
d.push(4);//對引用數據類型進行值的修改可進行
console.log(d);// [1,2,3,4]
d[0] = 2; // [2,2,3,4]
d = [1,2,3,4,5] //對引用數據類型進行地址修改,報錯

簡單來講 就是const定義的變量  不可以直接修改該變量,若爲非基本數據類型,可以修改該變量的值

4、是否可重複聲明

var 可重複聲明  let和const不可重複聲明

var a = 1;
var a = 2; //不報錯,可重複聲明
console.log(a); // 2

//let 和 const 情況相同
let a = 3;//報錯,上面已經聲明過a(var 聲明的也不可以)
let b = 1;
let b =2; //報錯,上面已經聲明過b

5、變量 提升

var聲明的變量會進行變量提升,但是賦值不提升;let和const聲明的變量不會提升。


console.log(v1);
var v1 = 100;
function foo() {
    console.log(v1);
    var v1 = 200;
    console.log(v1);
}
foo();
console.log(v1);

 輸出結果爲  undefined  undefined 200 100 

爲什麼呢?

因爲這裏還有函數提升,

函數聲明的優先級是要高於變量聲明的   即  function foo() 的聲明,在代碼執行時會被提到最頂端

單純的變量提升


function test () {
    console.log(a);  //undefined
    var a = 123; 
};

test();


// 它的實際執行順序如下

function test () {
    var a;
    console.log(a);
    a = 123;
}
test();


// 即對a的聲明被提到了最頂部去執行

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章