两分钟搞懂函数提升与变量提升

先不讲官方对“函数提升”与“变量提升”的定义,请回答我俩问题:

(写法1)

这里弹出“1”,应该是没什么问题吧?那么再看看下面这个:

(写法2)

相信很多同学会说,这里也是弹出1,没错,答案确实是1。那么我顺便就告诉你,上面的写法2就是所谓的函数提升。概念待会再普及,另外,补充一下,foo()函数这种写法是函数声明式。函数表达式的写法不存在函数提升。

接下来来看变量提升:

(写法1)

以上输出1234应该没异议吧?那么往下看:

(写法2)

请问上面输出的是多少?如果你测试了,就会得到undefined。为啥呢?实际上写法2就相当于:

(写法3)

写法3中,foo()函数里将num变量重新声明,然后弹出num,再给num赋值,那么弹出的自然是未赋值的num,而未赋值的num自然就是undefined。

有同学可能会问,上面的var num = 1234;无效吗?

是的,无效,因为这就是变量提升。变量提升就是:当函数内部定义的一个变量与外部相同时,那么函数体内的这个变量就会被上升到最顶端。

那么接下来就是讲函数提升。函数提升的概念就是:在js中,函数的声明会被提升到最顶部执行,变量提升也一样。如果函数提升与变量提升同时存在,函数提升优先级高于变量提升(Hosting)。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 继承 一、混入式继承 二、原型继承 利用原型中的成员可以被和其相关的对象共享这一特性,可以实现继承,这种实现继承的...
    magic_pill阅读 1,082评论 0 3
  • 像变量提升和函数提升这种偏学院派的问题在面试中出现的概率很高,在实际开发中也会影响到编程的效率。 前段时间在网上做...
    时和岁稔阅读 1,093评论 1 7
  • 函数声明和函数表达式有什么区别 JavaScript 中需要创建函数的话,有两种方法:函数声明、函数表达式,各自写...
    萧雪圣阅读 974评论 2 2
  • 人无高低贵贱之分,却有贫穷富贵之别。但无论是富人还是穷人,均不可丧失做人的气节与品格,有的人生活贫穷时,正直善良、...
    仲毅13852078510阅读 195评论 0 0
  • 路慢且长,总在等待; 生活快而短,经不起等待; 今天确且痛,等待明天; 明天未而喜,逃出今天。 总在幻想着跳出今天...
    不经意间流水年华阅读 298评论 0 1