理解var let const區別

js中存在三種聲明變量的方式 var let const,但是他們之間的區別很多卻分不清

var

  1. var只有函數作用域,沒有塊作用域,可以聲明全局/局部變量(在一共函數內聲明的變量,只在該函數有效)
  2. var定義的變量不能跨函數訪問,但是可以跨塊訪問!
  3. var 定義的變量如果不初始化會輸出undefined,但不會報錯
  4. 可以重複定義,後定義的會覆蓋先定義的
//3
var aaa;
console.log(aaa);   //會輸出undefined,並不會報錯
//-----------------------------------------
var a = 1;   //全局變量
console.log("全局變量a:"+a);    //全局變量a: 1

function A(){
    a=2;
    console.log("局部變量a:"+a);  //局部變量a: 2
    
}
A();
console.log("調用A函數,a變爲函數A內部修改的值:"+a);   //調用A函數,a變爲函數A內部修改的值:2
//---------------------------------------------
var b=1;
var b=2;
console.log(b);  //2,後面的聲明覆蓋了前面的聲明

let

  1. let是塊級作用域,函數內部使用let定義後,對函數外部無影響
  2. let定義的變量只能在塊作用域中訪問,不能跨塊訪問,更不能跨函數訪問
  3. 不能變量聲明提前,否則會報錯
  4. 不能重複定義,否則會報錯
//---1------
let a =1;
console.log("全局變量a:"+a); // 1
function A(){
    let a = 2;
    console.log("函數內部定義a:"+a);  //2
}
A();
console.log("A()函數調用後,let定義的a值在函數內部修改"+a);  //1  並不能訪問到
//---2-----
var b=1;
{
    let b=2;
    console.log(b);  //  2
}
console.log(b);   //1

//---3------
console.log(aaa);
let aaa=1;   
//會進行報錯,不能變量聲明提前
//----4-------
let p = 1;
let p = 2;
console.log(p);  //重複定義,會報錯


const

  1. const 定義的變量不可以修改,並且必須進行初始化
  2. const一般用來聲明常量,並且聲明的常量不允許改變的,(只讀屬性),因此必須在聲明的同時進行賦值
  3. const也是塊級作用域,與let相同,只能在塊作用域裏訪問,存在暫時性死區,不存在變量聲明提前,不允許重複定義
const a =1;   //正確
const b;   //報錯
//-----------------
const c=1;
const c=1;
//重複定義會報錯


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