浅聊JavaScript中的Hoisting(变量提升)
一直有写博客的想法但因为懒惰等各种情况没有付出实际行动,择日不如撞日,那就今天让我给大家简单归纳总结一下JavaScript中的Hoisting(变量提升)吧!
1.对于变量
//variablesconsole.log(me);
console.log(job);
console.log(year);var me='Ascend';
let job='student';
const year=2001;
结果如下:
这里我们看到变量me可以输出出来但是值为undefined,但是job不可以(year也不可以)。
2.对于函数
//functionsconsole.log(addDecl(2,3));
console.log(addExpr(2,3));
console.log(addArrow(2,3));function addDecl(a,b){return a+b;
}const addExpr=function (a,b){return a+b;
}const addArrow=(a,b)=>a+b;
结果如下:
当我把从const改为var后,
var addExpr=function (a,b){return a+b;
}var addArrow=(a,b)=>a+b;
结果如下:
告诉我们addExpr不是一个函数,与之前的错误提示不同.奇怪了,这明明就是一个函数为什么不是呢?
于是我直接输出addExpr,
console.log(addExpr);
得到如下结果:
我们发现addExpr实际上的值为undefined,undefined当然不是一个函数了!可是为什么值是undefined呢,参考第一点中的me,输出仍为undefined,所以我们可以感觉好像对于var声明的变量或函数,在hoisting时候值均为undefined。
3.一个例子
// exampleif(!numProducts) deleteShoppingCart();var numProducts=10;function deleteShoppingCart(){console.log(`All products deleted!`);
}
猜一猜输出结果?
跟上面一样,虽然在下面numProducts值为10,但是在hoisting时候初始值为undefined,所以上述结果就不奇怪了。
小小提示一下,在实际开发过程中,尽量不要使用var,用const和let足够了。
附:
类型 | 变量提升 | 初始值 | 作用域 |
---|---|---|---|
函数声明 | Yes | 就是实际的函数本身 | Block(块) |
var变量 | Yes | undefined | Function |
let和const变量 | No(从技术上讲,其实是有的;但实际上并没有,有点迷惑,不用管) | uninitialized,TDZ | Block(块) |
函数表达式或者箭头函数 | 取决于使用let还是var声明函数(同上) | / | / |
浅聊JavaScript中的Hoisting(变量提升)相关推荐
- JavaScript 中的 Hoisting (变量提升和函数声明提升)
如何将 函数声明 / 变量 "移动" 到作用域的顶部. 术语 Hoisting(提升) 在很多 JavaScript 博文中被用来解释标识符的解析.其实 Hoisting(提升) ...
- 浅聊JavaScript中的回调函数
Time will tell. 一.JavaScript中的函数 在 JavaScript 中,函数也是一种 data,一种数据,只不过这种数据比较特殊,它里面存的是代码,而且这种data可以被调用执 ...
- JavaScript中函数的变量提升问题
函数的大体分三种,一种是函数的声明,一种是函数表达式(又称为函数的字面量) 1.函数的声明 => function myFn(){}; 2.函数的表达式 => var myFn = fun ...
- JavaScript 中的 hoisting 到底是甚麼 ?
JavaScript 中的 hoisting 到底是甚麼 ? 前言 正文 到底什麼是 hoisting? let const 與 hoisting 為什麼要有 hoisting? hoisting 到 ...
- 浅谈javascript中原型(prototype)、构造函数、对象实例及三者之间的关系
转自:http://www.cnblogs.com/zhangwei412827/archive/2012/12/14/2816263.html 浅谈javascript中原型(prototype). ...
- html 滚动条 scrolltop scrollheight,浅谈JavaScript中scrollTop、scrollHeight、offsetTop、offsetHeight...
浅谈JavaScript中scrollTop.scrollHeight.offsetTop.offsetHeight 发布时间:2020-07-17 09:27:20 来源:亿速云 阅读:223 作者 ...
- 浅聊EEG中的跨频率耦合CFC
浅聊EEG中的跨频率耦合CFC 我们知道,EEG信号可以分为delta.theta.alpha.beta.gamma等频带,而所谓的跨频率耦合(cross-frequency coupling, CF ...
- 浅谈JavaScript中的NaN
浅谈JavaScript中的NaN NaN概念以及简单案例 追寻的纯粹该拥有自己的本质.-JC.F 什么是NaN? NaN:NaN(Not a Number),它表示不是数字,但是仍是数值类型. Na ...
- JavaScript hoisting(变量提升)学习总结
定义:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部. JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明. 例如一下两个例子: 例1: ...
最新文章
- 【SDOI2008】仪仗队
- 聊一聊Yarp结合Nacos完成服务发现
- Qt文档阅读笔记-继承QProgressDialog使得Dialog更加灵活
- Google位置服务模板
- mysql简单命令行操作以及环境变量的配置
- 55.伪造UDP数据包
- Excel VBA 设计调查问卷
- Python量化基础:时间序列的平稳性检验
- 在计算机操作中粘贴的快捷键是什么,键盘按什么键复制粘贴 键盘上复制粘贴快捷键是哪个键...
- 班主任工作总结中职计算机网络,中职班主任工作总结(优秀篇).doc
- SpringBoot RESTful API 架构风格实践
- 成功长青——不读此书,愧为人徒,不读此书,愧为人师
- python3抓取aqi
- 女子打扮时尚穿短裙 被8岁儿子指责像二奶
- HTML网页黑白滤镜
- GoLang结构体解析多维复杂json 坑了2天,毕竟还是我太弱了
- 个人永久性免费-Excel催化剂功能第24波-批量发送邮件并指点不同附件不同变量...
- Java+Selenium+Chrome、Firefox自动化测试环境搭建
- 数据增广:旋转,缩放,平移以及错切
- python中求最小公约数,python求最大公约数和最小公倍数的简单方法
热门文章
- 路由传递params参数(vue)
- NOIP 2021 游记
- 云尚办公OA系统学习笔记(5.权限管理)
- C语言例题——输出1000以内的所有完数
- Press Ping Yilan contemporary culture the cultivation of imagination Writing
- 深度学习应用系列——计算机视觉:表面缺陷检测(一)
- ntoskrnl.exe 占用 80 端口 怎样关闭 system 占用80端口的pid为4的进程
- 搜狗浏览器杨洪涛:开放平台应用不求面广 先求质精
- 智能语音储备战升级 人工智能助产业快速增长
- python程序设计基础山东联盟化工集团有限公司_02680061:-智慧树C语言程序设计(山东联盟-青岛科技大学)章节答案...