ES6 换了名字的变量

变量声明 let

不属于顶层对象window

 	var a = 5;
	let b = 6;
	console.log(window.a);
	console.log(window.b);

很简单,由var声明的a是winow的属性,而由let声明的b并不是window的属性,所以let不属于全局对象window。
var声明的变量全部挂载到window上,那window这个变量就会变得越来越大,同样就会引起全局变量污染,ES6中let 就很好的解决了这个问题。

不允许重复声明

	let a = 5;
	let a = 6
	console.log(a);

在这里插入图片描述
let声明的变量中这样是不允许的,但是如果是由 var声明的变量 就会直接覆盖掉上一个变量的值。

不存在变量提升

	console.log(a);
  	let a = 5

直接会报错 ,但是由var声明时 只会弹出undefined未定义

  	console.log(a);
  	var  a = 5
	//同等于
 	var a ;
 	console.log(a);
 	a = 5;

所以let是不存在变量提升的。

暂时性死区

	// 例1
	var a = 6666;
	if (true) {
    	a = 5555;
    	let a
    	console.log(a);
	}
	 // 例2
	function fun(b =a, a = 222) {
    	console.log(a, b);
	}
	fun();

这两个例子都是错误的,都存在暂时性死区。
顾名思义 ,暂时性死区就是在作用域内未声明之前就使用这个变量,同理在作用域内let必须先声明再定义,不可以先定义再声明,其本质就是防止在变量声明之前就使用这个变量,使代码更加的安全 。

块级作用域

  	if (false) {
  		var a = 555;
  	}
    console.log(a);

var声明的变量作用域在全局,可查找到这个a,但是获取不到值,输出的只能nudefined,但是将var换成let声明时,就会因为块级作用域的影响下直接报错,它让我们的代码更加的安全 。
每个 { } 都是一个块级作用域。
在ES6中 if 后面只有一条语句是也要写 { }

ES6 语法转换 ES5工具

ES6 语法转换 ES5

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值