美文网首页
变量提升和函数提升

变量提升和函数提升

作者: 明天的天明_3b79 | 来源:发表于2020-09-11 16:59 被阅读0次

    1.变量提升

    console.log(a);//undefined 

    var a=123;

    因为变量a的声明被提到了作用域顶端。代码编译后应该是下面这个样子(只是声明的a提升上去了,赋值并没有提升到顶端)

    在代码中 使用 var 来声明变量的时候,会提到当前作用域的顶端,而赋值操作在原处不变

    var a;

    console.log(a)

    a=123//所以输出内容为 undefined

    经典面试题

    解析:

    1.第一个打印出undefined是因为变量提升,当前的v1只是声明了并没有赋值

    2.第二个打印undefined是因为var的变量声明只是提升到当前作用域的顶端,foo函数体的v1跟第一个打印一样,只是提升没有赋值

    3.第三个打印是因为var重复声明并且内层变量会覆盖外层变量,当前的v1已经被修改

    4.第四个打印是因为函数内部的变量外部是访问不到的,当前的v1是100

    2.函数提升

    具名函数的声明有两种方式:1. 函数声明式 2. 变量形式声明

    //函数声明式 function bar () { }

    //变量形式声明; var foo = function () {}

    注意:

    bar()

    var bar=function(){console.log(2);}// 报错:TypeError: bar is not a function

    变量形式声明 的函数 和普通变量一样 提升的 只是一个没有值的变量,所以执行bar的时候函数体还在底下没有赋值

    bar()

    functionbar(){console.log(1);}//输出结果1

    函数声明式会提升到作用域最前边,并且将声明内容一起提升到最上边。,所以执行bar的时候它已经是一个函数体了

    函数声明的优先级高于变量声明的优先级,并且函数声明和函数定义的部分一起被提升,所以会先打印一个1然后才打印2

    相关文章

      网友评论

          本文标题:变量提升和函数提升

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