ES6(二) let const

一:let

1.块级作用域

外层作用域无法读取内层作用域的变量。

2.不存在变量提升

3.TDZ:暂时性死区

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

这样的设计是为了让大家养成良好的编程习惯,变量一定要在声明之后使用,否则就报错。

变量没声明和声明不赋值,返回的都是undefined。

总之,暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。

4.不允许重复声明

5.js的作用域:   块级作用域         函数作用域     全局作用域

为什么需要块级作用域呢?

答:两种不合理的场景       1.内层变量可能会覆盖外层变量。     2.用来计数的循环变量泄露为全局变量。

二:const

1.声明的值不可以改变。   初始化必须赋值。

2.类似于java的final关键字        对于引用数据类型,是引用地址不可变,但引用指向对象是可以变的。

三:补充

1.ES6的变量声明:var  function     let   const    import    class

2.ES5之中,顶层对象的属性全局变量是等价的。    顶层对象的属性与全局变量挂钩,被认为是JavaScript语言最大的设计败笔之一

思考:

1.块级作用域的出现,实际上使得获得广泛应用的立即执行函数表达式(IIFE)不再必要了。

时间: 2024-08-02 14:51:47

ES6(二) let const的相关文章

ES6 let和const 命令

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

es6 let和const

一.let 1.let块作用域 if(true){ var a=1; let b=2; } console.log("a:"+a);//a:1 console.log("b:"+b);//Uncaught ReferenceError: b is not defined let常用于for循环 二.const 1.const声明的变量也是块作用域,但是不能被多次修改 let a=10; const b=20; console.log(a); console.log(

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中let,const区别与其用法

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

es6 part 1 //const let

1. let 命令 ES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. { let a = 10; var b = 1; } a // ReferenceError: a is not defined. b // 1 上面代码在代码块之中,分别用let和var声明了两个变量.然后在代码块之外调用这两个变量,结果let声明的变量报错,var声明的变量返回了正确的值.这表明,let声明的变量只在它所在的代码块有效. for循环的计数器,

ES6 二

let 声明变量,只在声明的代码块内有效 var 声明是全局内声明,每一次循环i都会被重新覆盖 var a = []; for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); // 10 let 声明是局部,代码块内有效,每一次循环都是一个新的变量 var a = []; for (let i = 0; i < 10; i++) { a[i] = function () { console

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: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'; retur

ES6浅谈--const,数组解构

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