es6中的let和const

前言

es6新增let和const命令,用来声明变量,用法类似var,接下来,我将详细的说说let和const

1.为什么新增let

  • var不好吗,为啥要新增一个let呢?
    var缺点还真的多,我能列出三点:
1.可以重复声明 
2.无法限制修改 
3.木有块级作用域

重复声明 :

var a = 10;
var a = 20;
console.log(a)//20

木有块级作用域
啥是块级作用域呢?

{},if(){},for(){}
{
	var a = 10;
	console.log(a)//10
}
console.log(a)//10
var name="susu";
if(true){
	var name="susu000";
	console.log(name)//susu000
}
console.log(name)//susu000
  • var不够用吗,木有let的时候怎么搞呢?
    当然是闭包啦
    var只有在只有在function(){}中才有作用域
var name = "susu";
if (true) {
	(function() {
		var name = "susu000";
		console.log(name)//susu000
	})()
}
console.log(name)//susu

var name = "susu";
if (true) {
	(function(name) {
		console.log(name)//hello
	})('hello')
}
console.log(name)//susu

2.let

不能重复声明

let a = 10;
let a = 120;
console.log(a)//报错Identifier 'a' has already been declared

具有块级作用域

{
	let a = 10;
	console.log(a)//10
}
console.log(a)//a is not defined

注意:不具有变量提升

3.用let解決一些问题

一个经典的for循环语句

for (var i = 0; i < 8; i++) {
	setTimeout(() => {
		console.log(i)//88
	},100)
}

如何解决呢?
方法一:let

for (let i = 0; i < 8; i++) {
	setTimeout(() => {
		console.log(i)//88
	},100)
}

方法二:闭包

for (var i = 0; i < 8; i++) {
	(function(i) {
		setTimeout(() => {
			console.log(i)
		}, 100)
	})(i)
}

4.const

const 声明一个常量,一旦声明,常量的值不可改变
不得改变值,一旦声明,就必须立即初始化
只在声明的块级作用域内生效
变量不提升,只能在声明的位置后使用
与let一样,不可重复
声明复合类型的数据,(主要是对象和数组),变量指向的内存地址
const NAME="susu";
console.log(NAME)
const obj = {
	"name": 'sss',
	"age": 1,
};
console.log(obj)
obj.name = "susu "
// obj={}//Assignment to constant variable.
console.log(obj)
//没法跟let一样 ,先声明
const NAME;
NAME="ss"
console.log(NAME)//Uncaught SyntaxError: Missing initializer in const declaration

let a;
a=10;
console.log(a)//10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值