立即执行函数表达式的案例疑问??

//第一段代码
(function(){
   //dosomething
})()

上边这段代码,我可以理解写成:
 var something=function(){
   //dosomething
}
something();
这里的something是function(){//dosomething}的指针,可以用后者(实际对象)替换该指针
something,则something()可以写成(function(){//dosomething})(),但是,如果
我把第一段代码中()()第一个括号中匿名函数写成有名函数foo:
(function foo(){
    //dosomething
})()
这里的代码第一个()括号里是一个函数声明,而不是像前面是一个函数表达式,似乎不能按照上述的
演算过程,这里该如何理解呢???就是说,如果把匿名函数变成了有名函数,该如何理解其中的调用??
还烦请大神解惑!!
阅读 2.7k
4 个回答
(function foo(global){
    //dosomething
})(window);

其实这里你写不写名字都没什么关系;因为你是立即执行。
同常为了省事,写 立即执行 时候,是不需要给函数带名字的,意思就是说函数在这执行就好了,根本就不打算在后面再调用,没必要取个名字。当然写了,也没什么关系。

但是通常情况下单纯 写个函数 就应该给他个名字,不论是声明的形式,还是表达式的形式,不然会报错。原因你可以理解为,如果 你就 写了个 function(){...}; 这个么东东,是没有意义的,是个垃圾。因为你后面根本就没法调用! 你要么就立即调用,要么就赋给个变量,以便后面视情况调用。

括号有求值的意思,就是括号中要得到一个值,这个值就是声明的函数

首先来说,js里面并没有指针的概念。

第二段代码 是给一个变量赋值一个匿名函数,是可以当作上面代码去用的。

第一个括号的作用 1是避免全局环境污染, 2是让括号里面的内容可以被解析器去处理。这和里面的函数是不是有名字是没有关系的。

第二个括号是直接执行第一个括号里面的函数内容,名称不管是什么都会去执行。

function同时是函数声明和函数表达式的关键字,而且二者语法基本上是相同的。IIFE需要(function(){})()前边那个圆括号本质上是因为直接写function(){}是非法的,所以用圆括号包一下主要是为了让它合法;如果换用具名的函数表达式,应该并不影响运行(圆括号提升优先级的作用)。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题