资讯专栏INFORMATION COLUMN

ECMAScript6 新特性——“let和const命令”

PascalXie / 1880人阅读

摘要:基本用法所声明的变量,只在命令所在的代码块内有效。在循环中适合使用不存在变量提升不像那样会发生变量提升现象暂时性死区只要块级作用域内存在命令,它所声明的变量就绑定这个区域,不再受外部的影响。块级作用域实际上为新增了块级作用域。

1 let

基本用法

所声明的变量,只在let命令所在的代码块内有效。

{
    let b = 100;
    console.log(b); //100
}
    console.log(b); //Error

在for循环中适合使用let

不存在变量提升

let不像var那样会发生“变量提升”现象

{
    console.log(a); //undefined
    var a = 10;
    console.log(b); //b is not defined
    let b = 100;
}

暂时性死区

只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。

var a = 100;
{
    a = 10; //这里的a是let定义的a,而不是var定义的a,因为没有变量提升,所以报错
    let a;
}

不允许重复声明

let不允许在相同作用域内,重复声明同一个变量。

{
    let a;
    let a; //Identifier "a" has already been declared
}
2 块级作用域

let实际上为JavaScript新增了块级作用域。

let a = 100;
{
    let a = 10;
    console.log(a); //10
}
console.log(a); //100
3 const命令

基本用法

const也用来声明常量,一旦声明不可改变

const a = 100;
a = 10; //Assignment to constant variable.

只声明不赋值也会报错

const a; //Missing initializer in const declaration

也存在块级作用域

{
    const a = 10;
    console.log(a); //10
}
console.log(a); //a is not defined

同样存在暂时性死区

{
    console.log(a); //a is not defined
    const a = 10;
}

也不可重复声明

{
    const a = 10;
    const a = 100; //Identifier "a" has already been declared
}

指向复合类型变量地址不变,但对象本身可变

{
    const a = {};
    a.name = "Oliver";
    console.log(a.name); //Oliver
    a = {}; //Assignment to constant variable.
}

Object.freeze冻结对象

{
    const a = Object.freeze({});
    console.log(a); //Object {}
    a.name = "Oliver"; //不起作用
    console.log(a); //Object {}
}
4 全局对象的属性

let、const和class命令声明的全局变量不属于全局对象的属性

let a = 10;
console.log(a); //10
console.log(window.a); //undefined

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/79062.html

相关文章

  • ECMAScript6 特性——“变量的解构赋值”

    摘要:数组的解构赋值允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。如果变量名与属性名不一致,必须写成下面这样。 1 数组的解构赋值 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。 基本用法 { var [a,[b,c],d,,...f] = [1,[2,3],4,5,6,7]; console...

    Eric 评论0 收藏0
  • 【前端】ES6入门基础知识

    摘要:关于的入门了解新增模板字符串为提供了简单的字符串插值功能箭头函数操作符左边为输入的参数,而右边则是进行的操作以及返回的值。将对象纳入规范,提供了原生的对象。增加了和命令,用来声明变量。 关于ES6的入门了解 新增模板字符串(为JavaScript提供了简单的字符串插值功能)、箭头函数(操作符左边为输入的参数,而右边则是进行的操作以及返回的值Inputs=>outputs。)、for-o...

    philadelphia 评论0 收藏0
  • ES6

    摘要:对象可被不定参数和默认参数完美代替。将对象纳入规范,提供了原生的对象。规定,命令和命令声明的全局变量,属于全局对象的属性命令命令命令声明的全局变量,不属于全局对象的属性。。这些函数表达式最适合用于非方法函数,并且它们不能用作构造函数。 ES6的了解 新增模板字符串(为JavaScript提供了简单的字符串插值功能)、箭头函数(操作符左边为输入的参数,而右边则是进行的操作以及返回的值In...

    snifes 评论0 收藏0
  • ES6学习摘要(01)(人学习)

    摘要:入门一前言由于最近本人在学习,做一些笔记能够更好的熟悉,就趁此机会来写一篇关于的新人学习摘要吧。的作用域与命令相同只在声明所在的块级作用域内有效。块级作用域新增方式和实际上为新增了块级作用域。同时,函数声明还会提升到所在的块级作用域的头部。 ECMAScript6/ES6 入门 一、前言 由于最近本人在学习ES6,做一些笔记能够更好的熟悉,就趁此机会来写一篇关于ES6的新人学习摘要吧。...

    dmlllll 评论0 收藏0
  • ECMAScript6 特性——“正则的扩展”

    摘要:第二个参数指定修饰符,如果存在则使用指定的修饰符。属性表示是否设置了修饰符属性的属性返回正则表达式的正文的属性返回正则表达式的修饰符字符串必须转义,才能作为正则模式。 1 RegExp构造函数 ES6 允许RegExp构造函数接受正则表达式作为参数。第二个参数指定修饰符,如果存在则使用指定的修饰符。 var regexp = new RegExp(/xyz/i, ig); consol...

    Shisui 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<