javascript中这两个自执行函数有什么区别?

(function test(){
    console.log(123)
}())

(function test(){
    console.log(123)
})()


以上两段代码有什么区别呢?好像都能运行?
阅读 3.7k
8 个回答

没有区别。

不光如此,还可以这么写:
clipboard.png

(1 + 2) + 3 = ?
1 + (2 + 3) = ?

以上两个算式有什么区别?貌似计算结果一样?

没区别。加括号或其它是为了将函数声明转化为函数表达式,因为函数声明后面不能加括号,函数表达式可以跟括号。

// 函数声明
function foo() {}() // 出错 

所以无论加括号或其它都是一样的。

区别:写法不同。。。

都是匿名函数,效果没差。

;(function () {
    // 这个看起来更符合正常思维一些
})();

准确的说上面的两个是立即调用函数,立即调用函数和自执行函数的区别你可以查阅《深入理解javascript》的第4章立即调用的表达式。上面的两个立即调用函数作用没有区别,不过大多数推荐使用第一种,说是作为一个整体更符合语义。

第一个是把实参带入到函数体里面去执行。

第二个是先计算函数体,把形参的地方留空?然后把实参带进去执行。

(个人感觉。。)

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