摘要:和不同,没有变量提升,声明之前,该变量都是不可用的。声明创建一个只读的常量。这不意味着常量指向的值不可变,而是变量标识符的值只能赋值一次。声明同时必须赋值。
LET和const命令
var
变量声明提升原则
var语句声明的变量的作用域是当前执行位置的上下文
给一个非声明变量赋值会隐式创建一个全局变量(全局object的一个属性),注意这里是非声明赋值
声明和赋值是两回事,注意区分,referenceError和undefined
函数执行时,函数内部的变量才会声明,并且只声明一次,不会重复声明,执行完成后销毁,函数内调用时为调用其引用
let
和var不同,声明可以是块级的,也就是for函数内的n个函数块,let会声明n个变量( 每进入一次for花括号就生成了一个块级域 )
和var不同,重复定义会报错typeError 如果在子域内重复声明,是可以的。
和var不同,没有变量提升, let声明之前,该变量都是不可用的。称之为: 暂时性死区(temproal dead zone简称 TDZ)
let 块 提供了一种在块的范围内获取变量的值,而不会影响块外面名字相同的变量的值的方法
var x = 5; var y =0; let(x = x+10, y =12) { //这里隐式创建了一个包围 expr 的语句块。 console.log(x+y);// 27 } console.log(x + y); // 5
用 var 或 let 声明的未赋初值的变量,值会被设定为 undefined
- let声明的变量只在它所在的代码块有效,而非var为函数作用域 - let不会变量声明提前,未声明前使用,直接报错,var不会报错undefined - let回暂时性死区,一旦区块内let声明了a,全局变量a不会在该区块起 - let不允许在相同作用域内,重复声明同一个变量
- 防止内层变量可能覆盖外层变量 - for循环的i变量控制循环,防止泄露
- 使用{}代替立即执行匿名函数(IIFE) - ES5的严格模式规定,函数只能在顶层作用域和函数内声明,其他情况(比如if代码块、循环代码块)的声明都会报错。 - ES6由于引入了块级作用域,这种情况可以理解成函数在块级作用域内声明,因此不报错,但是构成区块的大括号不能少,否则还是会报错。
const 声明创建一个只读的常量。这不意味着常量指向的值不可变,而是变量标识符的值只能赋值一次。声明同时必须赋值。
- 声明一个只读的常量。一旦声明,常量的值就不能改变,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。 - const的作用域与let命令相同: 只在声明所在的块级作用域内有效 const命令声明的常量也是不提升 同样存在暂时性死区,只能在声明的位置后面使用 同样不可重复声明 - 对于复合类型的变量(例如对象、数组),变量名不指向数据,而是指向数据所在的地址。 const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变,所以将一个对象声明为常量必须非常小心。 如果真的想将对象冻结,应该使用Object.freeze方法,地址数据也不会变了
- ES6:var/function/let/const/import/class - ES5:var/function
- var命令和function命令声明的全局变量,依旧是全局对象的属性 - let命令、const命令、class命令声明的全局变量,不属于全局对象的属性,eg:`let b = 1; window.b 为undefined`
book url:http://es6.ruanyifeng.com/#do...
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/79430.html
摘要:外层作用域不报错正常输出块级作用域与函数声明规定,函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明。规定,块级作用域之中,函数声明语句的行为类似于,在块级作用域之外不可引用。同时,函数声明还会提升到所在的块级作用域的头部。 前言:最近开始看阮一峰老师的《ECMAScript 6 入门》(以下简称原...
摘要:的作用域与命令相同只在声明所在的块级作用域内有效。数值和布尔值的解构赋值解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。上面代码中,数值和布尔值的包装对象都有属性,因此变量都能取到值。默认值解构赋值允许指定默认值。 最近正在学习ES6,对于ES6的语法有一些自己的理解, 想写这篇文章帮助跟我一样的新手快速入门ES6而不至于连代码都看不懂. 至于开发环境的搭建什么...
摘要:和命令命令是在它所在的代码块有效,它属于块级作用域,新增。只有全局作用域和函数作用域。 let和const命令 let命令是在它所在的代码块有效,它属于块级作用域,es6新增。es5只有全局作用域和函数作用域。let命令存在暂时性死区(TDZ),即在申明前使用就会报错,不存在变量提升 console.log(a); // 报错 let a = 111; ==let不允许在相同作用域中,...
摘要:入门一前言由于最近本人在学习,做一些笔记能够更好的熟悉,就趁此机会来写一篇关于的新人学习摘要吧。的作用域与命令相同只在声明所在的块级作用域内有效。块级作用域新增方式和实际上为新增了块级作用域。同时,函数声明还会提升到所在的块级作用域的头部。 ECMAScript6/ES6 入门 一、前言 由于最近本人在学习ES6,做一些笔记能够更好的熟悉,就趁此机会来写一篇关于ES6的新人学习摘要吧。...
摘要:但是有了尾调用优化之后,递归函数的性能有了提升。常被用来检查对象中是否存在某个键名,集合常被用来获取已存的信息。循环解构对象本身不支持迭代,但是我们可以自己添加一个生成器,返回一个,的迭代器,然后使用循环解构和。 一、let和const 在JavaScript中咱们以前主要用关键var来定义变量,ES6之后,新增了定义变量的两个关键字,分别是let和const。对于变量来说,在ES5中...
阅读 2054·2021-11-22 13:52
阅读 978·2021-11-17 09:33
阅读 2710·2021-09-01 10:49
阅读 2842·2019-08-30 15:53
阅读 2662·2019-08-29 16:10
阅读 2434·2019-08-29 11:31
阅读 1349·2019-08-26 11:40
阅读 1867·2019-08-26 10:59