立即执行函数一般的写法是(()=>{})()这种,看到有人这么写(0,()=>{})(),想问下后面这种写法是有什么好处吗?

立即执行函数一般的写法是(()=>{})()这种,看到有人这么写(0,()=>{})(),想问下后面这种写法是有什么好处吗?谢谢!

阅读 4.1k
2 个回答

这个不存在好与坏之分,重点是为什么这么写

在js中,函数声明会被提前,所以在函数声明后加上()立即调用会抛出语法错误

functuion (){}()
//Uncaught SyntaxError: Unexpected token {

所以我们想让函数在代码的位置上才被处理,可以把函数变成函数表达式,下面举几个例子

(function(){})()

(function(){}())

+function(){}()

-function(){}()

~function(){}()

var a = function(){}()

上面的第一种写法和你问题中提到的两个写法是一样的,为什么说你提到的第二个和第一个是一样的?

因为表达式是有返回值,返回值是其结果

var a,b;//js中的,号可以连接表达式
a = 1; //此时会返回1
a = (1,2);//此时会返回2,因为,号可以连接表达式,表达式的结果为2

你还可以写成

(true,"今天好凉快",3.1415926,["草稿纸"],new Map(),()=>{console.log("阿嚏")})()

说正经的就是js逗号运算符按顺序执行表达式,并且获得最右边表达式的值

clipboard.png

好处?也许是能把人忽悠瘸吧(顺带执行最后一个逗号之前的表达式呗)

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