5 回答

TA貢獻1780條經驗 獲得超4個贊
謝謝各位的認真解答,綜合各位的答案,(function(){})
中括號就是括號,它的作用是讓瀏覽器把()
里的內容當做表達式去解析,如果不用括號包起來的話,瀏覽器就會把function(){}
當做是函數聲明,但是函數聲明沒有名字,于是就會報錯。
提到下面這幾種方法也可達到立即執(zhí)行函數的效果:
+function(name){console.log(name)}("123")
-function(name){console.log(name)}("123")
!function(name){console.log(name)}("123")
0 || function(name){console.log(name)}("123")
其中的+,-,!,0||等的作用應該也是讓瀏覽器把function(){}當成表達式,而不是函數聲明去處理。
再次感謝!

TA貢獻1797條經驗 獲得超6個贊
(function fun(a,b,c)
{
//…
})(1,2,3)
這里的括號(1,2,3)中的參數對應的是前面函數的參數,當第一個括號的代碼符合表達式規(guī)則時,前面的代碼會被作為函數表達式來執(zhí)行,所以最好在第一個函數表達式前面加上“;”分隔開,否則會報前一個表達式的值不是函數的錯誤。
如:alert(1)(function(){})(),此時alert(1)先執(zhí)行,由于符合立即執(zhí)行的函數表達式規(guī)則,所以alert(1)的返回值會被作為函數,同時將后一個括號中的值作為參數傳入,但alert(1)返回的是undefined,所以會報錯。解決辦法就是在alert(1)后面加上“;”或者“,”,將其拆分為兩個表達式。
立即執(zhí)行還可以用
(function fun(a,b,c)
{
//…
}(1,2,3))
!function fun(a,b,c)
{
//…
}(1,2,3)
void function fun(a,b,c)
{
//…
}(1,2,3)

TA貢獻1845條經驗 獲得超8個贊
調用運算符:跟在任何產生一個函數值的表達式之后的一對圓括號()
表達式內可包含零個或多個用逗號隔開的表達式。 每個表達式產生一個參數值
在 《JavaScript 語言精粹》里面,表示每個函數在創(chuàng)建時會附加兩個隱藏屬性,函數的上下文和實現函數行為的代碼(JavaScript創(chuàng)建一個函數對象時,會給給對象設置一個“調用”屬性)。當JavaScript調用一個函數時,可以理解為調用此函數的“調用”屬性。 可以跟上面的 () 聯系在一起。
添加回答
舉報