m0_46602893 2021-04-16 13:44 采纳率: 91.5%
浏览 33
已采纳

js问题,函数格式问题2?

var a=1;

                  (function(){    

                        console.log(a); 

                        var a=2;    

                        console.log(a);

                  })();

问题1:函数不是只有

1:function fn1(){

}

2:fn1=  function(){

}

这两种写法吗?

为什么会有将整个函数括号起来在后面再来个小括号的写法?

问题2:

var a = 1在第一行,所以已经声明并初始化,而且它在第一行也是首先首先执行,并且var a自动被提升在最上,

下面的funciton也是声明提升,那var a与function都提升的话,①哪个在前哪个在后?②变量的初始化不提升但是变量的初识化在第一位,所以如果排个顺序的话(1、var a先提升,2、function后提升就提升在var a前面了 3、所以第一名就是function ,第二名就是var a,因为var a只是声明提升但是初始化没提升所以var a = 1就被排在第三名了)?是不是这样理解?

  • 写回答

3条回答 默认 最新

  • Menkongkong 2021-04-16 17:43
    关注

    这样的函数执行方式属于自执行函数,去掉外面的括号里面是一个匿名函数,举个例子我定义一个函数。

    function fun(){};

    那么如果我想要调用这个函数需要fun(),这样函数就可以被调用了,可是匿名函数没有函数名怎么调用,模仿上面例子的调用方式在匿名函数后面加一个括号function(){}()调用这个函数,会报错,因为无法解析,解析器不知道你最后的()是一个函数申明还是一个函数调用。所以,任何消除函数声明和函数表达式间歧义的方法,都可以被解析器正确识别,赋值,逻辑,甚至是逗号,各种操作符都可以告诉解析器,这个不是函数声明,它是个函数表达式,加括号是因为这样相对来书解析的更快,通常情况下这样函数的使用场景用于闭包。

    你的第二个问题没有看明白,不过函数的提升大于变量的提升。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)