博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES6学习笔记一(let和const)
阅读量:6095 次
发布时间:2019-06-20

本文共 1667 字,大约阅读时间需要 5 分钟。

什么是let ES6新增加let命令,用于声明变量。用法和var十分相识,不过let声明的变量只在命令所在代码块内有效果。很多人可能和我一样使用了let不过并没有完全了解他,我们可以看一段代码

{    let a1=4;    var a2=5;}console.log(a1);//ReferenceError: a in not defindconsole.log(a2);//5复制代码

let不存在变量提升 如果你留意过,你一定会发现var存在“变量提升”的现象(变量在声明之前使用,值为undefined)。按照我们的正常思维声明只有这个变量才能使用,所以let就纠正了这个现象。我们来看一段代码

console.log(v);//undefinedvar v=4;复制代码
console.log(l);//ReferenceError: l in not defindlet l=5;复制代码

可以发现let声明的变量并没有提升,我们在声明之前输错他报了ReferenceError错误。

let不允许重复声明 let不允许在一个块级作用域内重复声明同一个变量。如果再次声明就会报错。

if(true){    let test=1;    var test=2;//报错}if(true){    let test=1;    let test=2;//报错}if(true){    let test=1;    if(true){        let test=2;//不报错    }}复制代码

我们发现同一个块级作用域中重复声明就会报错,但是如果我们在内部嵌套的块级作用域中再次声明却又是可以的。

let暂时性死区 let声明的变量只绑定在当前这个块级作用域内,不受外部的影响,那么如果块级作用域外声明了变量而在作用域内我们用let再次声明这个变量会出现什么情况呢。

var test="es6";if(!false){    test="es5";//ReferenceError: test is not defined    let test;}复制代码

我们在用var声明了全局变量test,但是我们在块级作用域内用let又声明了一个局部变量test,这样后者就绑定了这个块级作用域,所以我们对test赋值会出现报错。 ES6明确规定,在块级中存在let和const命令,则这个块级对这些命令声明的变量从一开始就形成了封闭作用域。在声明之前调用他们就会报错。

const命令 const声明的变量是一个只读变量,一旦声明,常量的值就不能改变了。所以const声明的变量必须在一开始就初始化不然就会报错,我们来看一段代码

const c=1;c=2//TypeError: Assignment to constant variable.复制代码
const c;//SyntaxError: Missing initializer in const declaration复制代码

const和let一样只在声明所在块级作用域有效,变量不会提升,同样存在暂时性死区,只能在声明之后使用,不可以重复声明。

const的本质 const声明的变量并不是值不得改动,而是变量指向的那个内存地址不得改动,对于基本类型的数据,值就保存在变量指向的内存地址中,因此他等同于常量。不过如果是复合类型数据(对象、数组),变量指向的内存地址保存的只是一个指针,const只能保存指针固定,不过指针指向的数据结构是不是改变的,是不能控制的,我们看一段代码。

const obj={a:2};obj.a=1;//我们可以修改他的属性obj.b=1;//我们可以添加他的属性obj={a:1}//不过我们不能修改这个指针 (报错)TypeError: Assignment to constant variable.复制代码

总结 let和const作为ES6新增加的指令虽然功能和var很相识,不过和var存在很多不同。

转载地址:http://idzza.baihongyu.com/

你可能感兴趣的文章
聊聊架构设计做些什么来谈如何成为架构师
查看>>
Java并发编程73道面试题及答案
查看>>
iOS知识小集·设置userAgent的那件小事
查看>>
移动端架构的几点思考
查看>>
Tomcat与Spring中的事件机制详解
查看>>
Spark综合使用及用户行为案例区域内热门商品统计分析实战-Spark商业应用实战...
查看>>
初学者自学前端须知
查看>>
Retrofit 源码剖析-深入
查看>>
nodejs express
查看>>
企业级负载平衡简介(转)
查看>>
ICCV2017 论文浏览记录
查看>>
科技巨头的交通争夺战
查看>>
当中兴安卓手机遇上农行音频通用K宝 -- 卡在“正在通讯”,一直加载中
查看>>
Shell基础之-正则表达式
查看>>
JavaScript异步之Generator、async、await
查看>>
讲讲吸顶效果与react-sticky
查看>>
c++面向对象的一些问题1 0
查看>>
直播视频流技术名词
查看>>
iOS13-适配夜间模式/深色外观(Dark Mode)
查看>>
网易跟贴这么火,背后的某个力量不可忽视
查看>>