ES6——let和const的用法

一、let

1.let命令, 用於聲明變量,只在let命令所在的代碼塊內有效
es5中的作用域有兩種,全局作用域和函數作用域,es6中let爲js新加入了塊級作用域,這表示外層代碼塊不受內層代碼塊的影響。let命令只在當前塊級作用域內有效。ES6 允許塊級作用域的任意嵌套。允許在塊級作用域之中聲明函數,但是該函數只能在該塊級作用域內有效。

注:在es6的瀏覽器中,es6爲了兼容老代碼,有如下規定

  • 允許在塊級作用域內聲明函數。
  • 函數聲明類似於var,即會提升到全局作用域或函數作用域的頭部。
  • 同時,函數聲明還會提升到所在的塊級作用域的頭部。
{
  let a = 10;
  var b =1;
}
console.log(b);//1
console.log(a);//a is not defined

var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 10

var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 6

2.let不存在變量的聲明提前

聲明提前:在js中var定義變量時,可以先使用變量,後定義。而let定義變量時不存在變量的聲明提前,即變量必須先定義後使用。

console.log(a); // 輸出undefined
var a= 2;

// let 的情況
console.log(b); // b is not defined
let b= 2;

3.暫時性死區

暫時性死區:es6規定,如果塊級作用域內存在let或const命令,那麼在該塊級作用域中,let和const就會行成封閉作用域,不受外界影響。凡是在聲明之前就使用這些變量,就會報錯。

var a = 123;
if (true) {
  a = 'abc'; // a is not defined
  let a;
}
console.log(a);

4.不允許重複聲明

let不允許重複聲明變量

// 報錯
function func1() {
  var a = 10;
  var a = 1;
  console.log(a);
}

// 報錯
function func2() {
  let a = 10;
  var a = 1;
  console.log(a);
}

// 報錯
function func3() {
  let a = 10;
  let a = 1;
  console.log(a);
}

func1(); // 1
func2(); // Identifier 'a' has already been declared
func3(); // Identifier 'a' has already been declared

二、const

1.一旦聲明,不可改變

2.一旦聲明,必須賦值

3.存在暫時性死區

4.不可重複聲明

5.不存在聲明提前,必須先定義後使用

6.常量名常用全大寫字母

const PI = 3.1415;
PI = 3.14; // Assignment to constant variable;

const a; //Missing initializer in const declaration
a = 10;

if (true) {
  const a = 5;
}
console.log(a); // a is not defined

if (true) {
  console.log(a); // a is not defined
  const a = 5;
}

var a = "a";
let b = 25;
const a = "b"; // Identifier 'a' has already been declared
const b = 30; // Identifier 'b' has already been declared

注:

對於引用類型數據(主要是對象和數組)來說,const定義常量,並不是常量的值不得改動,而是常量指向的那個內存地址所保存的數據不得改動。const只能保證這個指針是固定的(即總是指向另一個固定的地址),至於它指向的數據結構是不是可變的,就完全不能控制了。

const a = {};
a.name = 'lilei';
a.age = 23;
console.log(a);
a = {}; // Assignment to constant variable;

 

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