ES6笔记

一、let和const命令
let和var的区别
let声明的变量只在当前所在的代码块内有效

	{
	let a=1;
	var b=2;
	}
	console.log(a);//Uncaught ReferenceError: b is not defined
	console.log(b);//2
	let 声明的变量在代码块之外访问会报错

不存在变量提升
var命令会发生变量提升,即变量可以在声明之前使用
let命令声明的变量,一定要在声明后使用,否则会报错
consoele.log(a);//输出undefined
var a=5;
console.log(b);//报错
let b=1;
暂时性死区
只要块级作用域中存在let命令,它所声明的变量就绑定在这个区域,不再受外部的影响

	var a=1;
	if(true){
	console.log(a);//Uncaught ReferenceError: a is not defined
	let a=5;
	}

暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。

不允许重复声明
let 不允许在相同作用域内重复声明一个同一个变量

function test(){
let a=1;
let a=2;//报错
}

块级作用域
let实际上为函数新增了块级作用域

function test() {
  let a = 10;
  if(true){
	let a=5;
	}
console.log(a)
}
test();//输出10

证明外层外码块不受内层代码块的影响
ES6允许块级作用域的嵌套
外层作用域无法读取内层作用域的变量

{
  {
{let a=5}
console.log(a);//报错
}}

块级作用域与函数声明
ES6引入了块级作用域,明确规定允许在块级作用域中声明函数,函数声明类似于let,在块级作用域之外不能使用
function f() { console.log(‘I am outside!’); }

(function () {
  if (false) {
    // 重复声明一次函数f
    function f() { console.log('I am inside!'); }
  }
	f();
}());

上面代码在 ES5 中运行,会得到“I am inside!”,ES6 就完全不一样了,理论上会得到“I am outside!”。因为块级作用域内声明的函数类似于let,对作用域之外没有影响。

考虑到环境导致的行为差异太大,应该避免在块级作用域内声明函数。如果确实需要,也应该写成函数表达式,而不是函数声明语句。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值