关于javascript:ES6-中的let-与-const关键字

4次阅读

共计 1496 个字符,预计需要花费 4 分钟才能阅读完成。

ES6 中的 let 与 const 关键字

博客阐明

文章所波及的材料来自互联网整顿和集体总结,意在于集体学习和教训汇总,如有什么中央侵权,请分割自己删除,谢谢!

简介

let 和 const 是 es6 新减少的两个关键字,次要作用是用来申明变量

let 关键字

用法

let 申明的变量只在 let 命令所在的代码块内无效,不能反复申明

{ 
    let a = 0;  
    var b = 1;
    a   // 此时输入 0 
    b   // 此时输入 1
} 
a   // 此时报错 ReferenceError: a is not defined
b   // 此时输入 1

罕用环境

在应用 for 循环时,适宜应用 let 命令

for (let i = 0; i < 10; i++){...}
i // 此时报错 ReferenceError: i is not defined

在上述代码中,i只在 for 循环体之中无效,在循环体之外调用就会报错

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

在上述代码中,变量 ivar命令申明的,在全局范畴内都无效,所以全局只有一个变量i

每一次循环,变量 i 的值都会产生扭转,而循环内被赋给数组 a 的函数外部的 console.log(i),外面的i 指向的就是全局的 i。也就是说,所有数组a 的成员外面的 i,指向的都是同一个i,导致运行时输入的是最初一轮的i 的值,也就是 10。

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

如果应用 let,申明的变量仅在块级作用域内无效,最初输入的是 8。

不存在变量晋升

let 不存在变量晋升,var 存在变量晋升

var命令会产生“变量晋升”景象,即变量能够在申明之前应用,值为 undefinedlet 命令扭转了语法行为,它所申明的变量肯定要在申明后应用,否则报错。

console.log(a); //ReferenceError: a is not defined 
let a = "apple"; 

console.log(b); //undefined 
var b = "banana";

上述代码中,b在脚本开始运行时就存在了,然而还没有进行赋值,所以返回 undefineda 在变量申明之前不存在,所以会报错。

const 关键字

用法

const 申明一个只读变量,申明之后不容许扭转

const PI = "3.1415926";
PI  // 此时输入 3.1415926

PI = 3;
// TypeError: Assignment to constant variable.

const MY_AGE;  // 此时报错 SyntaxError: Missing initializer in const declaration    

const一旦申明必须初始化,否则会报错,只申明不赋值也会报错

暂时性死区(TDZ)

只有代码块中蕴含 let 或者 const,它所申明的变量就会绑定这个区域,不会再受内部的影响

var tmp = 123;

if (true) {
  tmp = 'abc'; // ReferenceError
  const tmp;
}

暂时性死区的范畴

在代码块内,应用 let 或者 const 命令申明变量之前,该变量都是不可用的。

if (true) {
  // TDZ 开始
  tmp = 'abc'; // ReferenceError
  console.log(tmp); // ReferenceError

  let tmp; // TDZ 完结
  console.log(tmp); // undefined

  tmp = 123;
  console.log(tmp); // 123
}

感激

万能的网络

菜鸟教程

阮一峰的 es6 语法教程

以及勤奋的本人,集体博客,GitHub

正文完
 0