一直有写博客的想法但因为懒惰等各种情况没有付出实际行动,择日不如撞日,那就今天让我给大家简单归纳总结一下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(变量提升)相关推荐

  1. JavaScript 中的 Hoisting (变量提升和函数声明提升)

    如何将 函数声明 / 变量 "移动" 到作用域的顶部. 术语 Hoisting(提升) 在很多 JavaScript 博文中被用来解释标识符的解析.其实 Hoisting(提升) ...

  2. 浅聊JavaScript中的回调函数

    Time will tell. 一.JavaScript中的函数 在 JavaScript 中,函数也是一种 data,一种数据,只不过这种数据比较特殊,它里面存的是代码,而且这种data可以被调用执 ...

  3. JavaScript中函数的变量提升问题

    函数的大体分三种,一种是函数的声明,一种是函数表达式(又称为函数的字面量) 1.函数的声明 => function myFn(){}; 2.函数的表达式 => var myFn = fun ...

  4. JavaScript 中的 hoisting 到底是甚麼 ?

    JavaScript 中的 hoisting 到底是甚麼 ? 前言 正文 到底什麼是 hoisting? let const 與 hoisting 為什麼要有 hoisting? hoisting 到 ...

  5. 浅谈javascript中原型(prototype)、构造函数、对象实例及三者之间的关系

    转自:http://www.cnblogs.com/zhangwei412827/archive/2012/12/14/2816263.html 浅谈javascript中原型(prototype). ...

  6. html 滚动条 scrolltop scrollheight,浅谈JavaScript中scrollTop、scrollHeight、offsetTop、offsetHeight...

    浅谈JavaScript中scrollTop.scrollHeight.offsetTop.offsetHeight 发布时间:2020-07-17 09:27:20 来源:亿速云 阅读:223 作者 ...

  7. 浅聊EEG中的跨频率耦合CFC

    浅聊EEG中的跨频率耦合CFC 我们知道,EEG信号可以分为delta.theta.alpha.beta.gamma等频带,而所谓的跨频率耦合(cross-frequency coupling, CF ...

  8. 浅谈JavaScript中的NaN

    浅谈JavaScript中的NaN NaN概念以及简单案例 追寻的纯粹该拥有自己的本质.-JC.F 什么是NaN? NaN:NaN(Not a Number),它表示不是数字,但是仍是数值类型. Na ...

  9. JavaScript hoisting(变量提升)学习总结

    定义:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部. JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明. 例如一下两个例子: 例1: ...

最新文章

  1. 【SDOI2008】仪仗队
  2. 聊一聊Yarp结合Nacos完成服务发现
  3. Qt文档阅读笔记-继承QProgressDialog使得Dialog更加灵活
  4. Google位置服务模板
  5. mysql简单命令行操作以及环境变量的配置
  6. 55.伪造UDP数据包
  7. Excel VBA 设计调查问卷
  8. Python量化基础:时间序列的平稳性检验
  9. 在计算机操作中粘贴的快捷键是什么,键盘按什么键复制粘贴 键盘上复制粘贴快捷键是哪个键...
  10. 班主任工作总结中职计算机网络,中职班主任工作总结(优秀篇).doc
  11. SpringBoot RESTful API 架构风格实践
  12. 成功长青——不读此书,愧为人徒,不读此书,愧为人师
  13. python3抓取aqi
  14. 女子打扮时尚穿短裙 被8岁儿子指责像二奶
  15. HTML网页黑白滤镜
  16. GoLang结构体解析多维复杂json 坑了2天,毕竟还是我太弱了
  17. 个人永久性免费-Excel催化剂功能第24波-批量发送邮件并指点不同附件不同变量...
  18. Java+Selenium+Chrome、Firefox自动化测试环境搭建
  19. 数据增广:旋转,缩放,平移以及错切
  20. python中求最小公约数,python求最大公约数和最小公倍数的简单方法

热门文章

  1. 路由传递params参数(vue)
  2. NOIP 2021 游记
  3. 云尚办公OA系统学习笔记(5.权限管理)
  4. C语言例题——输出1000以内的所有完数
  5. Press Ping Yilan contemporary culture the cultivation of imagination Writing
  6. 深度学习应用系列——计算机视觉:表面缺陷检测(一)
  7. ntoskrnl.exe 占用 80 端口 怎样关闭 system 占用80端口的pid为4的进程
  8. 搜狗浏览器杨洪涛:开放平台应用不求面广 先求质精
  9. 智能语音储备战升级 人工智能助产业快速增长
  10. python程序设计基础山东联盟化工集团有限公司_02680061:-智慧树C语言程序设计(山东联盟-青岛科技大学)章节答案...