回覆列表
  • 1 # 手機使用者82135411606

    這種寫法的作用其他答案已經提到了,第二對括號代表立刻執行前面的匿名函式,括號內的值會作為實參傳遞給匿名函式。現在來說一下第一對括號的作用,即為什麼要在匿名函式外面套一層括號。如果不加第一對括號,無論是

    還是都是會報錯的。因為js的引擎會把這裡的 function 看成是函式宣告,而函式宣告不允許沒有函式名,因此會對匿名函式報錯。匿名函式只允許以表示式的形式存在,例如:這裡的匿名函式就是作為 setTimeout 的一個引數,是表示式,這種寫法是允許的。或者:把一個匿名函式賦值給一個變數,這是一個var語句,而匿名函式在該語句中充當函式表示式的角色。如果這裡的函式有名字呢?不會報錯,但語義會發生變化。例如:控制檯裡會輸出“1”。原因是js引擎會認為前面的函式是一個函式宣告的語句,而後面的(1)是另一個單獨的語句,於是執行後面的語句,在控制檯輸出1。它實際上等價於:js的括號有幾種不同的作用,其中一種作用就是:表示在括號內的是表示式而不是語句。具體到這個例子上,第一對括號就是告訴js引擎,這裡面的匿名函式是一個函式表示式,而不是函式宣告語句。因此加了這個括號之後,就不會報錯了。為了實現“告訴js引擎這個匿名函式是表示式”的目的,還有其他幾種寫法。可以把第一對括號放在最外面,例如:在匿名函式前面新增單目運算子,這點其他答案也提到了:等等。

  • 中秋節和大豐收的關聯?
  • 為什麼曹雪芹中年後這麼落魄?不都說龍生龍,鳳生鳳,他沒有像他祖輩一樣撐起家族麼?