ES6-let,const解析

2020-09-17 11:27:18 浏览数 (1)

ES6-let,const解析

      • 我们先看看ES5中var变量的缺点
      • ES6-let 解析
      • ES6-const解析

我们先看看ES5中var变量的缺点

  • var会使变量提升(即下面声明的上面也可以使用)
代码语言:javascript复制
	console.log(a);
	var a = 10;
  • 变量可重复定义,也不会报错
代码语言:javascript复制
	var a = 10;
	var a = 20;
  • var声明的变量会挂载到window上,会使window上的方法失效
代码语言:javascript复制
	var name = 20;
	console.log(window.name);
  • 方法内的变量未经声明立即使用,也会挂载到window上
代码语言:javascript复制
   function print(){
   	a  = 30;
   }

ES6-let 解析

  • let的优点 1.没有变量提升(即变量必须声明了才能使用)
代码语言:javascript复制
	console.log(a);//这里会报错,显示a未定义
	let a = 20;
  1. 不能重复定义(重复声明会报错)
代码语言:javascript复制
	let a = 20;
	let a = 30;//a is already delcare!
  1. 不会挂载到window上(不会影响到window上的方法)
代码语言:javascript复制
let name = 20;
console.log(window.name);//undefined;
  1. 可以解决闭包的问题

此处形成了闭包,所以导致function拿到的i是同一个,所以每次打印的都是10

代码语言:javascript复制
	var arr = [];
	for(var i = 0; i < 10; i  ){
		arr.push(function(){
			console.log(i);
		})
	}
	arr[1]();//10
	arr[2]();//10

解决方案:将var的变量i换成let声明的变量i

代码语言:javascript复制
	var arr = [];
	for(let i = 0; i < 10; i  ){
		arr.push(function(){
			console.log(i);
		})
	}
	arr[1]();//1
	arr[2]();//2
  • let的缺点
  1. 会导致临时死区(即外面声明了变量a,里面也声明了变量a,{}里面的a会使外面的a失效,此处的{}可以是函数{}即作用域)
代码语言:javascript复制
	let a = 10;
	{
		console.log(a);
		let a = 20;
	}

ES6-const解析

  • const的用处:
  1. 定义常量,如果定义的常量被修改会报错此处指的会报错是常量未原始值
代码语言:javascript复制
	const A = 20;
	A = 30;

1.如果定义的是引用值,则可以修改

代码语言:javascript复制
	let obj = {
		name: 'zhangsan'
	}
	const Role = obj;
	Role.name = "lisi";
  • const的其他特点和let相同,即不会变量提升,不会挂载到window, 不能重复声明,缺点也相同,也会造成临时死区

0 人点赞