App下載
話題 首頁 > JavaScript 教程 > JavaScript 教程話題列表 > 詳情

javascript里function之前加上感嘆號 ' ! ' 會怎么樣?

精華
鵬魚燕 2016-10-20 11:33:52 瀏覽(7507) 回復(fù)(5) 贊(0)
一般看JQuery插件里的寫法是這樣的 . ``` (function($) { //... })(jQuery); ``` 今天看到bootstrap的javascript組件是這樣寫的 ``` !function( $ ){ //... }( window.jQuery ); ``` 為什么要在前面加一個 " ! " 呢?
javascript jquery

回答(5)

2016-10-20

我們都知道,函數(shù)的聲明方式有這兩種

function fnA(){alert('msg');}//聲明式定義函數(shù)
var fnB = function(){alert('msg');}//函數(shù)賦值表達(dá)式定義函數(shù)

樓主問題中出現(xiàn)的兩個函數(shù),都是匿名函數(shù)。通常,我們調(diào)用一個方法的方式就是 FunctionName()

但是,如果我們嘗試為一個“定義函數(shù)”末尾加上(),解析器是無法理解的。

function msg(){
  alert('message');
}();//解析器是無法理解的

定義函數(shù)的調(diào)用方式應(yīng)該是 msg() ; 那為什么將函數(shù)體部分用()包裹起來就可以了呢?

原來,使用括號包裹定義函數(shù)體,解析器將會以函數(shù)表達(dá)式的方式去調(diào)用定義函數(shù)。也就是說,任何能將函數(shù)變成一個函數(shù)表達(dá)式的作法,都可以使解析器正確的調(diào)用定義函數(shù)。而 ! 就是其中一個,而 + - || 都有這樣的功能。

另外,用 ! 可能更多的是一個習(xí)慣問題,不同的運算符,性能是不同的。

推薦閱讀: 《 function與感嘆號》

xdsnet 2016-11-21

這句話如果拆解開其實是

  1. 定義了一個有參數(shù)匿名函數(shù)

  1. 這個匿名函數(shù)以實參 hljs javascript window .jQuery 執(zhí)行了一次

3.這個匿名函數(shù)執(zhí)行后有返回值,但被!取反了(不過這里返回值沒有再利用)。

其實這里關(guān)鍵的是前兩部工作。

一筆荒蕪 2018-05-31

留名留名!!!,同樣的問題,看看咋結(jié)局!!!

1144100656 2018-05-31

留名留名!!!,同樣的問題,看看咋結(jié)局!!!

1152696398 2018-05-31

好慢呀,空空如也,半天不來大神解決,大佬在哪啦

要回復(fù),請先登錄 或者注冊