天天看點

js var、let、const聲明變量

var聲明

var varname= 10;

變量值可以沒有,即 var varname,那麼varname預設就是undefined;

var 作用域的了解:js作用域的了解

let聲明

ES6 新增了 let 指令,用來聲明變量。它的用法類似于 var,但是所聲明的變量,隻在 let 指令所在的代碼塊内有效。

1. 變量名不能重複

  • let 聲明的變量,變量名不能重複! 而且必須先聲明後使用。
1  var a = 0;
2     let a = 1;  // 報錯 --- 辨別符 'a' 已經聲明
3      

VM1019:2 Uncaught SyntaxError: Identifier 'a' has already been declared

2. 塊級作用域

  • 塊級作用域,相當于局部作用域。在JS中,隻有函數才能創造一個局部作用域,但是在ES6中,隻要是個 { } 都是塊級作用域(局部作用域)。
// 對象:
     {
         var a = 1;
         let b = 2;
     }
     console.log(a);  // a = 1    
     console.log(b);  // 報錯 --- b is not defined      

3. let 聲明的變量隻能在目前作用域使用

  • js5 中 用 var 在 for 中聲明的變量,可以再外部通路。
  • es6中 用 let 在 for 中聲明的變量 ,無法在外部通路。
  • 在 js 中,全局變量可以在局部環境下使用,局部變量不能在全局下使用。
  • 在 es6 中,let 聲明的變量,全局變量隻能在全局使用,局部變量隻能在局部使用。而且全局聲明的變量與局部聲明的變量沒有任何關系, 變量名都可以一樣。
// 在 js 中函數創造局部環境 
    for (var i = 0; i < 10; i++) {
        var a = i;
    }
    console.log(i);     // 10
    console.log(a);     // 9      
// es6 中 用 let 在 for 中聲明的變量 ,無法在外部通路。
    for (let i = 0; i < 10; i++) {
        let a = i;
    }
    console.log(i);     // i is not defined
    console.log(a);     // 沒執行到      

4.暫時性死區

在代碼塊内,使用 let 指令聲明變量之前,該變量都是不可用的。這在文法上,稱為“暫時性死區”

{
        console.log(a);   //undefined。
        var a = 1;        // 局部作用域
        console.log(a);//1      

let 聲明的變量 ,必須先聲明再使用,否則報錯;

{
        console.log(a);   // 報錯 --- 在初始化之前無法通路'a'     應該先聲明後使用。
        let a = 1;        // 局部作用域
        console.log(a);
}      

const關鍵字

  • 在ES6中用來聲明靜态常量。
  • 常量在聲明時,所有字母必須大寫, 必須指派。
  • 一旦聲明,常量的值就不能改變。
;
    console.log(PI);
    PI = 0; 
    console.log(PI);    // 報錯 --- 常量無法修改,  對常數變量的指派。
    const ABC;
    console.log(ABC);   // 報錯 --- 在const聲明中缺少初始化      

 conset 和let在作用域上一緻;差別是let定義變量,const定義常量;