首页 > 试题广场 >

执行下列程序,输出结果为() var a = 1; func

[单选题]

执行下列程序,输出结果为()


var a = 1;
function fn(){
    var a = 2;
    function a(){console.log(3);}
    return a;
    function a(){console.log(4);}
}
var b = fn();
console.log(b);


  • 1

  • 2

  • f a(){console.log(3);}

  • f a(){console.log(4);}

因为: var 定义的变量有变量提升,function 定义的函数也有函数提升
所以 函数fn()的执行过程相当于:
function fn(){
        function a(){ console.log(3) }
        function a(){ console.log(4) }
        var a;
        a = 2;
        return a;
}
变量提升及函数提升可参考:https://www.cnblogs.com/liuhe688/p/5891273.html
编辑于 2022-01-07 09:27:16 回复(4)
当变量名和函数名相同时,如果变量声明并且赋了值。变量会覆盖函数。反之,声明了没赋值,函数覆盖变量
发表于 2021-12-12 21:50:23 回复(0)
优先变量提升,然后函数赋值大于形参赋值大于变量赋值。
函数fn预解析一下   这道题没有形参赋值。
function fn(){
    var a ;//此处变量提升 变量名和函数名都是a  提升到当前作用域的最顶端
   a=function (){console.log(3);}  //接着函数赋值
   a= function (){console.log(4);} //函数赋值
a=2;  //最后变量赋值   
    return a;
   }
应该能看明白吧
发表于 2022-02-22 13:46:07 回复(5)
函数提升优先于变量提升,题中变量已经赋值,返回变量,若变量没有赋值返回函数。
发表于 2022-03-04 12:09:27 回复(0)
当函数名跟变量名相同的时候,预解析以函数为主。 return后面的语句不会执行但会预解析
发表于 2021-12-12 19:51:56 回复(0)
变量和函数都存在提升,但是函数提升的优先级大于变量提升。
发表于 2022-04-04 12:43:13 回复(0)
变量提升优先于函数提升,证据是
function x() {
      console.log(1);
    }
var x;
console.log(x);
//输入如下
ƒ x() {
    console.log(1);
    }

编辑于 2023-03-20 17:28:16 回复(0)
fn函数内部先变量提升,a为undefined,然后被函数a所覆盖,到执行的时候,a的值为2,所以返回2
发表于 2022-01-25 11:46:28 回复(1)
函数提升优先级最高,其次是表达式、变量
发表于 2023-11-04 09:42:50 回复(0)
函数是一等公民,函数提升在变量提升之前
发表于 2023-10-15 14:26:01 回复(0)
函数提升优先于变量提升
发表于 2023-09-20 19:28:09 回复(0)
函数先提升,变量后覆盖
发表于 2023-03-03 11:08:31 回复(0)
函数是一等公民
发表于 2023-02-08 09:03:30 回复(0)
函数提升会优于变量提升
发表于 2022-09-06 22:31:52 回复(0)
函数提升优先变量提升
发表于 2022-04-07 02:02:15 回复(0)