美文网首页
ES6 (一)之 let 与const

ES6 (一)之 let 与const

作者: Ordenme | 来源:发表于2021-01-27 18:05 被阅读0次

概述

let 、const 是es6中新增的变量声明方式。与var关键字声明相同

特点

1.局部作用域

使用let、const声明的变量只在该变量所在的代码块中有效。也就是说代码块(局部作用域)中let或const声明的变量无法被外部访问。但内层作用域中的变量可以访问到外层中声明的变量。

例1
{
  let a = 10;
  var b = 1;
}
a // ReferenceError: a is not defined.
b // 1

例2
for (let i = 0; i < 10; i++) {}
console.log(i);
//ReferenceError: i is not defined

例1上面代码在代码块之中,分别用let和var声明了两个变量。然后在代码块之外调用这两个变量,结果let声明的变量报错,var声明的变量返回了正确的值。这表明,let声明的变量只在它所在的代码块有效。(const相同)
例2代码中,计数器i只在for循环体内有效,在循环体外引用就会报错。

2.不存在变量提升

·变量提升是说函数及变量的声明都将被提升到函数的最顶部。也就是说函数及变量可以先使用后声明!
·在使用let或const声明的变量必须先声明后使用,如果先使用后声明则会报错,出现暂时性死区
·内部作用域中let或const声明的变量不会覆盖到父级作用域中用let或const声明相同的变量。也就是说父子级中声明的相同名字的变量是相互独立、互不影响的。

typeof x; // ReferenceError
let x;

上面代码中,变量x使用let命令声明,所以在声明之前,都属于x的“死区”,只要用到该变量就会报错。因此,typeof运行时就会抛出一个ReferenceError。

3. 不允许重复声明

let不允许在相同代码块(作用域)内,重复声明同一个变量。
(在以上说明属于let 、const共有特性)
(函数声明具体规则将在函数文章中进行整理)

独特的const

·const声明一个只读的常量。一旦声明,常量的值就不能改变。一旦声明变量,就必须立即初始化,不能留到以后赋值。
·在用const声明的复合型变量时必须非常小心。因为变量名不指向数据,而是指向数据所在的地址。const命令只是保证变量名指向的地址不变,并不保证该地址中的数据不变

当const声明为复合变量时
例1
const foo = {};
foo.prop = 123;
foo.prop  // 123
foo = {}; // TypeError: "foo" is read-only

例2
const a = [];
a.push('Hello'); // 可执行
a.length = 0;    // 可执行
a = ['Dave'];    // 报错

例子中常量是复合类型。储存的是一个地址,这个地址指向一个‘复合类型’的常量。不可变的只是这个地址,即不能把这个‘复合类型’的常量指向另一个地址,但这个‘复合类型’的常量本身是可变的,所以依然可以为其添加新属性。将另一个‘复合类型’的常量赋值给这个‘复合类型’的常量,就会报错。
!!!如果声明的常量不许操作修改,可以使用Object.freeze();

const foo = Object.freeze({});

// 常规模式时,下面一行不起作用;
// 严格模式时,该行会报错
foo.prop = 123;

相关文章

  • ES6之 let 和 const 命令

    ES6 之 let 和 const 命令 1、let 命令 1.1、基本用法 ES6 新增了let命令,用来声明变...

  • TS中 var 和 let 的区别

    let 和 const 是 ES6 中新增的声明对象的类型。与 var 相比,let 和 const 不存在...

  • JavaScript ES6 - let 与 const 使用方

    ES6 语法: let 与 const 本文主要讲解 let / const / var 关键字相关内容, 解释了...

  • (JS)

    ES6 let、const和var的区别 let和const声明变量不存在变量提升 let和const不能重复声明...

  • ES6(let 与 const)

    ES6中引入了let 和 const来声明变量,我们来看下let 和 const 的使用 一、let let定义的...

  • 认真的变量

    ES6加了更多特性,let,const使程序更加的严格与规范。 要使用let,const等严格变量,要在文件首行写...

  • es6,es7,es8语法总结

    ES6 1. var let const let,const具有块级作用域,不具有变量提升 const 用...

  • ES 6 7 8 随笔 QAQ

    ES6 1. var let const let,const具有块级作用域,不具有变量提升 const 用...

  • ES6、ES7常用特性

    一、ES6(ES2015)新特性 1、支持let和const在之前JS是没有块级作用域的,const与let填补了...

  • es6 :let const 解构赋值

    let,const let和const是es6新增的两个变量声明关键字,与var的不同点在于:(1)let和con...

网友评论

      本文标题:ES6 (一)之 let 与const

      本文链接:https://www.haomeiwen.com/subject/phcigctx.html