资讯专栏INFORMATION COLUMN

ES6:let const

A Loity / 764人阅读

摘要:声明变量存在的问题变量提升引起的问题在的预编译阶段,引擎会将上面的函数修改如下因此,引入了块级作用域,强化对变量生命周期的控制,块级作用域声明在指定块作用域内的变量不能被该作用域之外来访问用法与相同,但可以把变量的作用域限制在当前代码块,变

es5 声明变量
var variable = value;
存在的问题: 变量提升引起的问题
function get(condition) {
    if(condition) {
        var value = "test";
        return value;
    }else {
        return null;
    }
}

在JS的预编译阶段,JS引擎会将上面的函数修改如下:

function get(condition) {
    var value;
    if(condition) {
        value = "test";
        return value;
    }else {
        return null;
    }
}

因此,ES6引入了块级作用域,强化对变量生命周期的控制,块级作用域:声明在指定块作用域内的变量不能被该作用域之外来访问

let

用法与 var 相同,但可以把变量的作用域限制在当前代码块,变量声明不会被提升

function get(condition) {
    if(condition) {
        
    }else {
        return null;
    }
}

同一作用域内不能用 let 重复定义变量

var name = "test";
let name = "test";
// Uncaught SyntaxError: Identifier "name" has already been declared
const

声明常量,值不可更改(如定义的是对象,则可以修改对象的值),声明的变量必须初始化;与 let 一样,不存在变量提升并且同一作用域内不能用 const 重复定义变量

const name = "test";  // 正确定义并初始化

const obj = {count: 1};
obj.count = 2;

const name;
// Uncaught SyntaxError: Missing initializer in const declaration
var name = "test";
const name = "test";
// Uncaught SyntaxError: Identifier "name" has already been declared
const name = "test1";
name = "test2";
// Uncaught TypeError: Assignment to constant variable.
临时死区(TDZ)

因为 let 与 const 不存在变量提升,如果在声明变量之前使用这些变量则会触发引用错误;只有在变量声明之后,变量才会从TDZ中移出,即可正常访问。

typeof value;
let value = "test";
// VM2053:1 Uncaught ReferenceError: value is not defined

原文链接:https://arronf2e.github.io/post/es6-let-const

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

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

相关文章

  • ES6学习 第一章 letconst 命令

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

    番茄西红柿 评论0 收藏2637
  • 新手快速学习ES6语法,用最快的速度入门ES6就看这里

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

    vspiders 评论0 收藏0
  • ES6基础

    一、块级作用域 1. var 首先看看ES5中得变量声明方式 if (true) { var a = 2 } console.log(a) // 2 以上代码等同于 var a if (true) { a = 2 } console.log(a) 以上可知 : 在块内部定义变量 变量提升,到函数最顶部 通过var声明的变量,无论在何处声明,均为全局作用域 2.let 和 ...

    BigTomato 评论0 收藏0
  • 学习ES6笔记──工作中常用到的ES6语法

    摘要:但是有了尾调用优化之后,递归函数的性能有了提升。常被用来检查对象中是否存在某个键名,集合常被用来获取已存的信息。循环解构对象本身不支持迭代,但是我们可以自己添加一个生成器,返回一个,的迭代器,然后使用循环解构和。 一、let和const 在JavaScript中咱们以前主要用关键var来定义变量,ES6之后,新增了定义变量的两个关键字,分别是let和const。对于变量来说,在ES5中...

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

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

    dmlllll 评论0 收藏0
  • es6学习之letconst命令

    摘要:和命令命令是在它所在的代码块有效,它属于块级作用域,新增。只有全局作用域和函数作用域。 let和const命令 let命令是在它所在的代码块有效,它属于块级作用域,es6新增。es5只有全局作用域和函数作用域。let命令存在暂时性死区(TDZ),即在申明前使用就会报错,不存在变量提升 console.log(a); // 报错 let a = 111; ==let不允许在相同作用域中,...

    DrizzleX 评论0 收藏0

发表评论

0条评论

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