美文网首页
两分钟搞懂函数提升与变量提升

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

作者: 你单排吧 | 来源:发表于2017-12-25 17:22 被阅读0次

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

(写法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)。

相关文章

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

    先不讲官方对“函数提升”与“变量提升”的定义,请回答我俩问题: 这里弹出“1”,应该是没什么问题吧?那么再看看下面...

  • 关于变量提升

    函数提升的优先级要高于变量提升,变量提升到函数声明的后面; 变量提升,但是赋值不提升,函数表达式不提升;

  • JS中的提升

    JS中包含两种提升,变量提升和函数提升。 变量提升 变量提升只能是var或者function声明的变量或者函数,l...

  • let const var

    变量提升 函数会优先于变量提升; 函数提升会把整个函数移到作用域顶部 变量提升智慧把变量的定义移到作用域顶部 wi...

  • 变量提升与函数提升

    注:变量提升,更通俗的说法是将“识别符”提升到它所作用域的最前面。 比如:函数里面申明一个变量,var i=10;...

  • 变量提升与函数提升

    变量声明提升通过var定义(声明)的变量,在定义语句之前就可以访问的值:undefined 函数声明提升通过fun...

  • 变量提升与函数提升

    变量提升与函数提升 我们知道 这个时候运行a() 输出 jirengu ;而 这个时候a()输入结果却为undef...

  • 函数提升与变量提升

    以下内容不一定对,仅个人理解 众所周知,类似var a = 1;这种可分为两步,第一步编译为var a;提升至自身...

  • js3-函数变量提升 顶层函数 数据类型转换 Math对象 js

    函数变量的提升 函数内部变量提升: 函数内部使用变量, 默认情况下, 函数会把下面变量它的声明提升到函数的最上边 ...

  • Javascript 变量执行过程 和 数组 & 对象的区别

    变量提升 JS执行过程1. 先提升(先提升函数,再提升变量,如果名字一样,变量提升会覆盖函数提升)2. 再执行,如...

网友评论

      本文标题:两分钟搞懂函数提升与变量提升

      本文链接:https://www.haomeiwen.com/subject/kiolgxtx.html