ES6 换了名字的变量

56 阅读2分钟

我正在参加「掘金·启航计划」

变量声明 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