es6 let const

let、const

let基本用法
let类似于var,但是所声明的变量,只在let命令所在的代码块内有效

var a = []
for(var i = 0;i<10;i++){
	a[i] = function(){
		console.log(i)
	}
}
a[6]()  // 10

i 是 var 命令声明的,在全局范围内都有效,所以全局只有一个变量 i。每次循环,变量 i 的值都会发生变化,而循环内被赋给数组 a 的函数内部的 console.log(i),里面的 i 指向的就是全局的 i。也就是说,所有数组的 a 的成员里面的 i,指向的都是同一个 i,导致运行时输出的是最后一轮的 i 的值,也就是10。

var a = []
for(let i = 0;i<10;i++){
	a[i] = function(){
		console.log(i)
	}
}
a[6]()  // 6

i 是let声明的,当前的 i 只在本轮循环有效,所以每一次循环的 i 其实是一个新的变量,所以输出 6。
不存在变量提升
var 命令会发生变量提升,即变量可以在声明之前使用,值为undefined,let 所声明的变量一定要在声明后使用
暂时性死区
只要块级作用域内存在 let 命令,它所声明的变量就绑定在这个区域,不再受外部影响。
在代码块中,使用 let 命令声明变量之前,该变量都是不可用的。在语法上称为暂时性死区
暂时性死区意味着 typeof 不再是百分百安全的操作,会抛出错误。
暂时性死区的本质就是,一旦进入当前作用域,所要使用的变量就已经存在了,但是不可以获取,只有等到声明变量的那一行代码出现才可以获取和使用该变量。
不允许重复声明
let 不允许在相同作用域内,重复声明同一个变量。
const基本用法
const声明一个只读的常量,一旦声明,常量的值就不允许改变。
const 和 let 作用域相同,只在声明所在的块级作用域内有效;const 声明的变量也是不提升,同时存在暂时性死区,不可以重复声明
本质
const 并不是变量的值不动,而是变量指向的那个内存地址所保存的数据不得改动,对于简单的数据类型(数值,字符串,布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。对于复合类型的数据(对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,至于指向的数据结构是否可变,就不能控制了,因此将一个对象声明为产量必须十分小心。
冻结对象的方法:Object.freeze({})

var constantize = (obj) => {
	Object.freeze(obj)
	Object.keys(obj).forEach((key,i)=>{
		if(typeof obj[key] === 'object'){
			constantize(obj[key])
		}
	})
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值