摘要:声明变量存在的问题变量提升引起的问题在的预编译阶段,引擎会将上面的函数修改如下因此,引入了块级作用域,强化对变量生命周期的控制,块级作用域声明在指定块作用域内的变量不能被该作用域之外来访问用法与相同,但可以把变量的作用域限制在当前代码块,变
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 declaredconst
声明常量,值不可更改(如定义的是对象,则可以修改对象的值),声明的变量必须初始化;与 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
摘要:外层作用域不报错正常输出块级作用域与函数声明规定,函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明。规定,块级作用域之中,函数声明语句的行为类似于,在块级作用域之外不可引用。同时,函数声明还会提升到所在的块级作用域的头部。 前言:最近开始看阮一峰老师的《ECMAScript 6 入门》(以下简称原...
摘要:的作用域与命令相同只在声明所在的块级作用域内有效。数值和布尔值的解构赋值解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。上面代码中,数值和布尔值的包装对象都有属性,因此变量都能取到值。默认值解构赋值允许指定默认值。 最近正在学习ES6,对于ES6的语法有一些自己的理解, 想写这篇文章帮助跟我一样的新手快速入门ES6而不至于连代码都看不懂. 至于开发环境的搭建什么...
摘要:但是有了尾调用优化之后,递归函数的性能有了提升。常被用来检查对象中是否存在某个键名,集合常被用来获取已存的信息。循环解构对象本身不支持迭代,但是我们可以自己添加一个生成器,返回一个,的迭代器,然后使用循环解构和。 一、let和const 在JavaScript中咱们以前主要用关键var来定义变量,ES6之后,新增了定义变量的两个关键字,分别是let和const。对于变量来说,在ES5中...
摘要:入门一前言由于最近本人在学习,做一些笔记能够更好的熟悉,就趁此机会来写一篇关于的新人学习摘要吧。的作用域与命令相同只在声明所在的块级作用域内有效。块级作用域新增方式和实际上为新增了块级作用域。同时,函数声明还会提升到所在的块级作用域的头部。 ECMAScript6/ES6 入门 一、前言 由于最近本人在学习ES6,做一些笔记能够更好的熟悉,就趁此机会来写一篇关于ES6的新人学习摘要吧。...
摘要:和命令命令是在它所在的代码块有效,它属于块级作用域,新增。只有全局作用域和函数作用域。 let和const命令 let命令是在它所在的代码块有效,它属于块级作用域,es6新增。es5只有全局作用域和函数作用域。let命令存在暂时性死区(TDZ),即在申明前使用就会报错,不存在变量提升 console.log(a); // 报错 let a = 111; ==let不允许在相同作用域中,...
阅读 1896·2021-11-19 09:40
阅读 2628·2021-08-30 09:46
阅读 2196·2021-08-03 14:01
阅读 2663·2019-08-30 10:54
阅读 1220·2019-08-29 16:38
阅读 1461·2019-08-29 11:02
阅读 2552·2019-08-28 18:16
阅读 1704·2019-08-28 18:09