let作用域问题
Posted longlongdan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了let作用域问题相关的知识,希望对你有一定的参考价值。
- 在使用let定义变量时遇见这样一个错误
1 async addPageVersion(uuid, param) 2 let result = await this.getVersions(uuid, pageData: param.pageData); 3 if(result&&result.length) 4 //更新时间 5 let result = await to(Pageversion.findOneAndUpdate(uuid,pageData: param.pageData, updateTime: param.updateTime)); 6 else 7 //添加 8 let res = await this.getVersions(uuid); 9 10 let uuid, lastAuthor, pageData, updateTime, imgUrl = param; 11 let pageVersion = new Pageversion(uuid,lastAuthor, pageData,updateTime, imgUrl); 12 result = await to(pageVersion.save()); 13 14
if里面可以获取到参数uuid,但是在else里面我们的参数uuid会为undefine??
- let定义的变量会有块级作用域,第12行定义的let会覆盖掉传入的参数uuid。
- 但是还有一个问题,为什么uuid会是undifined而不是报错呢?
- 原因其实是因为我们的代码并不是直接执行的,而是通过编译工具执行。区别在于编译之后的代码会存在作用域提升。相当于代码变成了下面的写法(参考:https://segmentfault.com/q/1010000018839614)
function a(uuid) if(..) ... else let uuid; console.log(uuid); uuid = ??;
以上是关于let作用域问题的主要内容,如果未能解决你的问题,请参考以下文章