ES6:let const

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) {
        <!-- value 作用域开始
        let value = ‘test‘;
        return value;
        作用域结束 -->
    }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://www.cnblogs.com/liupengfei13346950447/p/10875160.html

时间: 2024-08-29 14:03:00

ES6:let const的相关文章

ES6基础之const声明

问题 今天在分析React教程时,观察到如下代码: class Board extends React.Component { constructor(props) { super(props); this.state = { squares: Array(9).fill(null), }; } handleClick(i) { const squares = this.state.squares.slice(); squares[i] = 'X'; this.setState({squares

ES6浅谈--const,数组解构

关于const: 1.const声明的基本类型的值不可重复声明,不可修改,声明之后需要初始化,声明存在暂时性死区,只在声明的块级作用域内有效. 2.const本质上确保的是变量的内存地址的数值不会被改动,所以对于基本类型的值来说,数值在栈中保存,不会被修改:但是对于对象来说,const声明的对象不可以被改变的是内存地址,数据存在堆中,是可以被修改的,如果想不被修改需要freeze. 3.冻结对象后不能新添加属性,但是还可以修改原有属性,所以需要彻底冻结所有属性. 4.浏览器环境下顶层对象和全局对

学些ES6:Map

Map: 初始化: const mapSize = (new Map()).size; // mapSize: 0 const pair1 = [1, 'one']; const pair2 = [2, 'two']; const map = new Map([pair1, pair2]); // new Map().set(...pair1).set(...pair2); // 以最后设的值为准: const pair1 = [1, 'one']; const pair2 = [1, 'uno

ES6(二) let const

一:let 1.块级作用域 外层作用域无法读取内层作用域的变量. 2.不存在变量提升 3.TDZ:暂时性死区 "暂时性死区"也意味着typeof不再是一个百分之百安全的操作. 这样的设计是为了让大家养成良好的编程习惯,变量一定要在声明之后使用,否则就报错. 变量没声明和声明不赋值,返回的都是undefined. 总之,暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量. 4.不允许重复声明 5.

ES6:变量的解构赋值

1.数组的解构赋值 基本用法: ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring).  以前,为变量赋值,只能直接指定值. var a = 1; var b = 2; var c = 3; ES6允许这样写: var [a,b,c] = [1,2,3]; console.log(a); //1 console.log(b); //2 console.log(c); //3 上面代码表示,可以从数组中提取值,按照对应位置,对变量赋值. 本质上,

es6之 let&amp;const

let 声明了一个块级域的局部变量 const 声明一个块级域的只读的常量 let 和 const 共有的特性: 不存在变量提升 console.log(a); // undefined console.log(b); // Uncaught ReferenceError: b is not defined(-) var a = 1; let b = 2; // 或 const b = 2; 都存在暂时性死区在代码块内,使用 let const 命令声明变量之前,该变量都是不可用的.这在语法上,

学些ES6:Destructuring

Destructuring: 数组: let [firstValue] = [1]; // firstValue: 1 let c, d;let [a, b] = [c, d] = [1, 2]; var [head, ...tail] = [1, 2, 3, 4]; // tail: [2,3,4] 可以交换变量: let [x, y] = ['ax', 'why'];[x, y] = [y, x]; // x: why, y:ax const all = ['ax', 'why', 'zet

es6中let,const区别与其用法

ECMAScript 是什么? 首先,我们都知道JavaScript由三部分组成:ECMAScript,DOM,BOM: 其中的ECMAScript是Javascript的语法规范. ECMAScript定义了很多东西,如: 语法-----解析规则,关键字,语句,声明,操作等 类型-----布尔型,数字,字符串,对象等 原型和继承 内置对象,函数的标准库----------JSON, Math, 数组方法,对象方法等 浏览器兼容: 目前Google和Firefox浏览器对ES6新特性的兼容最友好

ES6 let和const 命令

一.let命令 使用的注意事项: 1.es6新增了let命令,它的用法和var 差不多,但是它声明的变量只在let命令所在的代码块有效 2.不存在变量提升,所以变量要声明后再使用,不然会报错 3.不允许在相同的作用域中重复声明同一个变量,所以也不能在函数里重新声明参数 4.let为js新增了块级作用域,这样就能避免变量的全局污染 4-1.为什么需要块级作用域 1.在es5中,函数作用域:内层变量可能会覆盖外层变量 2.用来计数的循环变量泄露为全局变量 4-2.es6中的块级作用域 1.避免循环变