JavaScript ES6语法:let与const

ES6新增两个变量声明的关键词letconst
let声明的变量只在当前代码块中有效,该变量在别的代码块中则无效,也就是说let声明的变量的作用域更小,相比var声明的全局变量,let的声明方式操作起来简洁许多。
const声明一个常量,一旦声明,则该常量的值就无法更改了。

一、let声明

{
	let a = 0;
	console.log(a) //输出:0
}
console.log(a) //报错:Uncaught ReferenceError: a is not defined

在花括号里是一个代码块,可以正常引用变量a,在花括号外应用则报错。

1.1 不能重复声明

{
	let a = 1;
	let a = 2;
	console.log(a) //报错: Uncaught SyntaxError: Identifier 'a' has already been declared
	var b = 3;
	var b = 4;
	console.log(b) //输出:4
	var c = 5;
	let c = 6;
	console.log(c) //报错:Uncaught SyntaxError: Identifier 'c' has already been declared
}

let不允许重复声明同一个变量,否则会报错,如果先用var声明一个变量,再用let覆盖声明,这样也是行不通的,依然报错。
因为这个特性let非常适合for循环计数器

{
	// var方式
	for(var i=0; i<10; i++){
		setTimeout(function(){
			console.log(i); //最终输出十个10
		})
	}
	//let方式
	for(let j=0; j<10; j++){
		setTimeout(function(){
			console.log(j); //依次输出0~9
		})
	}
}

setTimeout定时器里的i是全局变量,而setTimeout会在整个循环结束时才执行,因为整个循环结束时,i在被循环时依次被递增到了10,才退出整个循环。这时候setTimeout开始执行,所以会输出十个10。
let声明方式在每次循环(每次循环都时一个独立的代码块)的时候,j都被重新声明,所以循环结束时setTimeout里的j就是0~9的十个数。

1.2 不存在变量提升

{
	console.log(a); //undefined
	var a = 0;
	console.log(b); //报错:Uncaught ReferenceError: a is not defined
	let b = 0;
}

var存在变量提升,当程序开始运行时,变量a就已经存在了,只不过还没有赋值,所以报undefined。
let不存在变量提升,当程序开始运行时,变量b并不存在,所以报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值