博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES6 -- let和const
阅读量:5785 次
发布时间:2019-06-18

本文共 1492 字,大约阅读时间需要 4 分钟。

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为函数作用域- let不会变量声明提前,未声明前使用,直接报错,var不会报错undefined- let回暂时性死区,一旦区块内let声明了a,全局变量a不会在该区块起- let不允许在相同作用域内,重复声明同一个变量
为什么引进块级作用域?
- 防止内层变量可能覆盖外层变量- for循环的i变量控制循环,防止泄露
块级作用域
- 使用{}代替立即执行匿名函数(IIFE)- ES5的严格模式规定,函数只能在顶层作用域和函数内声明,其他情况(比如if代码块、循环代码块)的声明都会报错。- ES6由于引入了块级作用域,这种情况可以理解成函数在块级作用域内声明,因此不报错,但是构成区块的大括号不能少,否则还是会报错。
const

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://hjtyx.baihongyu.com/

你可能感兴趣的文章
redhat tomcat
查看>>
统计数据库大小
查看>>
第十六章:脚本化HTTP
查看>>
EXCEL表中如何让数值变成万元或亿元
查看>>
nginx在响应request header时候带下划线的需要开启的选项
查看>>
Linux下DHCP服务器配置
查看>>
AndroidStudio中导入SlidingMenu报错解决方案
查看>>
编写高性能的java程序
查看>>
Spring 的配置详解
查看>>
linux已经不存在惊群现象
查看>>
上位机和底层逻辑的解耦
查看>>
关于微信二次分享 配置标题 描述 图片??
查看>>
springcloud使用zookeeper作为config的配置中心
查看>>
校园火灾Focue-2---》洗手间的一套-》电梯
查看>>
bzoj1913
查看>>
L104
查看>>
分镜头脚本
查看>>
链表基本操作的实现(转)
查看>>
邮件发送1
查看>>
[转] libcurl异步方式使用总结(附流程图)
查看>>