let const命令(ES6知识点汇总---第一章)

前言:ES6平时在工作中应用诸多,但掌握的都太浅显,用的也都很基础,
于是买了本阮一峰的《ES6标准入门(第三版)》,在看这本书的同时也寄
希望能借助写博客的方式帮助自己重新梳理、记忆相关知识点以及养成写博客
的习惯。在这个系列里我整理的基本都是书上已有的,会加入一些自己的理解,
并做一些适当的缩减,如有错误望指出[抱拳]感谢!

1、let和const命令

1.1 let命令
let命令是ES6新增命令,用于声明变量。用法类似于var,但是声明的变量只在let命令所在的代码块内有效。

{
  let a = 1;
  var b = 2
}
  console.log(b);  //2
  console.log(a);  //Uncaught ReferenceError: a is not defined
   总结一下就是let声明的变量只在自己的块级作用域内有效,超出调用则
   会报错。而var定义的变量是全局变量,只要定义了全局都生效。
      现在在实际开发过程中除非必要情况,用的一般都是let,已经很少去
   用var定义变量了,主要也是为了避免全局的变量污染。

1.1.1 let不存在变量提升
这个做了解就好,变量提升就是按理论来说,变量只能在声明该变量的语句之后才能使用该变量。
但var声明的变量可以在声明之前使用,值为undefined,let命令则是纠正了这种情况,如果在声明之前使用会直接报错。

1.1.2 暂时性死区
只要块级作用域内存在let命令,它所声明的变量就绑定的这个区域,不在受外部影响。

var tmp = 123;

if(true){
	tmp = 'abc';  //ReferenceError
	let tmp;
}

这个可以理解为只要我在某个块级作用域内用let、const声明了某个变量,这个块级作用域就会锁死该变量。跟变量提升一样,在声明之前引用的话会直接报错。
这个在语法上被称为“暂时性死区”(temporal dead zone,简称TDZ)

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

function(){   		//报错
	let a = 1;
	var a = 2;
}
function(){  		//报错
	let a = 1;
	let a = 2;
}
function(arg){  	//报错
	let arg;
}
function(arg){
	{				//正常
		let arg;
	}
}

1.2 const命令
const声明一个只读的常量。一旦声明,常量的值就不能改变。

const a = 10;
a = 11;  //报错

const实际上保证的并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。
对于一些简单类型的数据(数值、字符串、布尔值)来说,值就保存在变量指向的内存地址中,因此等同于常量,不能进行改动。
但对于数组和对象来说,变量指向的内存地址保存的只是一个指针,const只能保证这个指针是固定的,至于指向的数据结构是不是可变的,这完全不可控。

const foo = {};
//添加属性
foo.a = 1;
console.log(foo.a);  //1

//将foo指向另一个对象 则会报错
foo = {};  //报错

坚持写博第1/100天;加油!奥里给!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值