资讯专栏INFORMATION COLUMN

ES6(一): let,const

blair / 1148人阅读

摘要:明确规定,如果区块中存在和命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。暂时性死区意味着不再是一个百分百的安全操作了不允许重复声明不允许在相同作用域内,重复声明同一个变量。

let,const共同拥有的特点

提供了代码块级作用域;(代码块是用{}来实现的)

不存在变量提升,先声明再使用;

存在“暂时性死区”;

不允许重复声明;

“暂时性死区”。

ES6明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
在代码块内,使用let或者const命令声明变量之前,该变量是不可用的,这就是“暂时性死区”。只要在块级作用域内存在let命令,它所声明的变量就“绑定”在这个区域,不再受外部的影响。

    var tmp = 123;
    if(true){
        tmp = "abc";//ReferenceError
        let tmp;
    }

在这个if的语句块内,tmp跟外面声明的tmp没有关系,所以这个时候tmp相当于是一个新的变量。

“暂时性死区”意味着typeof不再是一个百分百的安全操作了

{
    typeof x;//ReferenceError
    let x;
}

不允许重复声明

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

//报错
function(){
    let a = 10;
    let a = 1;
}
const的注意点

const声明一个只读的常量,一旦声明,常量的值是不能改变的。但是const实际上保证的是变量指向的那个内存地址不能改动,并不是变量的值不能改动。

const foo = {};
//可以改变变量的值
foo.prop = 123;

foo = {};//报错
块级作用域与之前矛盾点(稍微知道点就行)

块级作用域与函数声明
本来规定在块级作用域内,是不能有函数声明的。但是浏览器为了兼容以前的代码,所以是允许的。所以ES6在附录中规定,浏览器可以有自己的行为,以下的规则只对ES6的浏览器实现有效,其他环境不用遵守

允许在块级作用域内声明函数

函数声明类似于var,即会提升到全局作用域或者函数作用域的头部

函数声明还是会提升到所在块级作用域的头部

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

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

相关文章

  • ES6学习 第letconst 命令

    摘要:外层作用域不报错正常输出块级作用域与函数声明规定,函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明。规定,块级作用域之中,函数声明语句的行为类似于,在块级作用域之外不可引用。同时,函数声明还会提升到所在的块级作用域的头部。 前言:最近开始看阮一峰老师的《ECMAScript 6 入门》(以下简称原...

    番茄西红柿 评论0 收藏2637
  • 带你入门 JavaScript ES6 ()

    摘要:是国际组织于年月日发布的第六版,正式名为通常被成为或。二模版字面量提供一种简单实现表达式嵌套的字符串字面量操作,简而言之就是能够以简单的方法实现字符串拼接操作。 本文同步 带你入门 JavaScript ES6 (一),转载请注明出处。 ES6: 是 ECMA国际组织于 2015 年 6 月 17 日发布的 ECMAScript 第六版,正式名为 ECMAScript 2015,通常被...

    lindroid 评论0 收藏0
  • ES6 知识整理es6快速入门)

    摘要:函数调用会在内存形成一个调用记录,又称调用帧,保存调用位置和内部变量等信息。等到运行结束,将结果返回到,的调用帧才会消失。方法用于将一组值,转换为数组。,和遍历数组方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的方法类似。 ES6 简介 ES6, 全称 ECMAScript 6.0 ,是 JavaScript 的下一个版本标准,2015.06 发版。 let 和 const...

    elva 评论0 收藏0
  • ES6 学习笔记(letconst和解构赋值

    摘要:另外对于已经声明的变量进行解构赋值时,要非常小心。因此在行首加,将其强制转化为表达式执行。由于和无法转为对象,所以对它们进行解构赋值,都会报错。 let和const let和const是es6新增的两个变量声明关键字,与var的不同点在于: (1)let和const都是块级作用域,在{}内有效,这点在for循环中非常有用,只在循环体内有效。var为函数作用域。 (2)使用let和con...

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

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

    dmlllll 评论0 收藏0
  • 新手快速学习ES6语法,用最快的速度入门ES6就看这里

    摘要:的作用域与命令相同只在声明所在的块级作用域内有效。数值和布尔值的解构赋值解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。上面代码中,数值和布尔值的包装对象都有属性,因此变量都能取到值。默认值解构赋值允许指定默认值。 最近正在学习ES6,对于ES6的语法有一些自己的理解, 想写这篇文章帮助跟我一样的新手快速入门ES6而不至于连代码都看不懂. 至于开发环境的搭建什么...

    vspiders 评论0 收藏0

发表评论

0条评论

blair

|高级讲师

TA的文章

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