Javascript的函數自調


嗯 也不知道怎么翻譯self-invoked,就當自調吧。

在看bootstrap的輪播插件源碼的時候發現一種新的自調函數的寫法(其實應該不新了),開頭的一段就卡住了,原諒我是個菜鳥,就順便記錄一下。stackoverflow上有大神們的回答在這里,輪播的函數形式如下:

!function ($) {
   //code here
}(window.jQuery);

通常自調函數來模仿塊級作用域的方式是:

(function(parameters){
     //這里是塊級作用域
})();

在function外面的這對括號使里面的匿名函數變成了函數表達式,並在之后馬上調用。這個相當於:

var Name=function(parameters){
   //這里是塊級作用域
}; 
Name();  //調用匿名函數

函數表達式是在運行中以引用的方式賦值給一個變量的,如上面的函數創建的方式。而這里函數表達式和函數聲明是不一樣的,函數聲明的通常形式如下:

function Name(parameters){
    //code here
}

函數聲明會在程序剛開始運行的時候會被提升(所以可以在執行之后聲明),但是並不執行,直到被調用的時候再執行。

所以與括號作用相同的function前面的感嘆號,因為括號的優先級高於感嘆號,感嘆號使得后面的一整串內容變成了一個bool表達式,編譯器就會直接運行這個表達式了。這個表達式是個匿名函數,傳入了一個參數,這里命名成$,其實無所謂是什么,只是一個形參,並在自調的時候把jQuery對象傳進去,這里的jQuery對象是個全局變量,所以是windows.jQuery

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM