博客列表 >ES6 let 与 const声明

ES6 let 与 const声明

Lon
Lon原创
2021年09月29日 15:30:22534浏览

ES6 let 与 const声明

了解更多请访问https://www.runoob.com/w3cnote/es6-let-const.html

ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: letconst
let 声明的变量只在 let 命令所在的代码块内有效。
const 声明一个只读的常量,一旦声明,常量的值就不能改变。

一.let声明
1、代码块内有效

let 是在代码块内有效,var 是在全局范围内有效

  1. // ES6 新增了一个新的变量声明:let,它和 var 变量声明非常的类似
  2. //块级区域
  3. {
  4. var value = 10;
  5. let count = 20;
  6. }
  7. console.log(value); //10
  8. console.log(count); //报错

2、不能重复声明

let 只能声明一次 var 可以声明多次

  1. // var 声明可以重复声明同一个变量,后面会取代前一个变量
  2. // let 声明不可以重复声明一个变量,会直接报错,就算其中一个是 var
  3. let a = 1;
  4. let a = 2;
  5. var b = 3;
  6. var b = 4;
  7. console.log(a); //报错
  8. console.log(b); //4

3、不存在变量提升

let 不存在变量提升,var 会变量提升

  1. // let 声明方式,就算在后面声明,前面的输出依然是引用错误
  2. console.log(value); //undefined
  3. var value; //变量提升导致逻辑怪异
  4. console.log(count); //引用错误
  5. let count;

变量 value用 var 声明存在变量提升,所以当脚本开始运行的时候,value 已经存在了,但是还没有赋值,所以会输出 undefined。
变量 count 用 let 声明不存在变量提升,在声明变量 count 之前,count 不存在,所以会报错。

4、暂时性死区

ES6 明确规定,代码块内如果存在 let 或者 const,代码块会对这些命令声明的变量从块的开始就形成一个封闭作用域。码块内,在声明变量 value 之前使用它会报错。
如果在 let 声明前使用变量,这段区域被称为“临时死区(或暂时性死区)。

  1. var vlaue = 20;
  2. if(true){
  3. //死区开始
  4. console.log(value);
  5. //死区结束
  6. let value = 10
  7. console.log(value);
  8. }

5、实例

在循环中,var 和 let 的区别尤为明显,let 只在循环内部有效。
var 全局有效,导致后续再使用 i 会引起干扰,而 let 则不会。

  1. for (var i = 0; i < 10; i++) {
  2. setTimeout(function(){
  3. console.log(i);
  4. })
  5. }
  6. // 输出十个 10
  7. for (let j = 0; j < 10; j++) {
  8. setTimeout(function(){
  9. console.log(j);
  10. })
  11. }
  12. // 输出 0123456789

变量 i 是用 var 声明的,在全局范围内有效,所以全局中只有一个变量 i, 每次循环时,setTimeout 定时器里面的 i 指的是全局变量 i ,而循环里的十个 setTimeout 是在循环结束后才执行,所以此时的 i 都是 10。
变量 j 是用 let 声明的,当前的 j 只在本轮循环中有效,每次循环的 j 其实都是一个新的变量,所以 setTimeout 定时器里面的 j 其实是不同的变量,即最后输出 12345。(若每次循环的变量 j 都是重新声明的,如何知道前一个循环的值?这是因为 JavaScript 引擎内部会记住前一个循环的值)。

二、const 声明

const 声明的作用是:创建一个只读的常量,一旦声明不可改变;
和 let 声明一样,const 声明的常量无法提升,也存在临时死区;
和 let 不同的是,const 声明后必须立刻赋值,否则会报错;

1、基本用法

  1. const PI = 3.14;//常量约定俗成大写
  2. console.log(PI);
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议