匿名函數自執行

   在看bootStrap插件的時候發現這種寫法函數

 !function(){}這種寫法,不解,後來看到網上的文章才知道,這是匿名函數的一種寫法spa

 

    1. 什麼是自執行的匿名函數?
    它是指形如這樣的函數: (function {// code})();

    2. 疑問
    爲何(function {// code})();能夠被執行, 而function {// code}();卻會報錯?

    3. 分析
    (1). 首先, 要清楚二者的區別:
    (function {// code})是表達式, function {// code}是函數聲明.
    (2). 其次, js"預編譯"的特色:
    js在"預編譯"階段, 會解釋函數聲明, 但卻會忽略表式.
    (3). 當js執行到function() {//code}();時, 因爲function() {//code}在"預編譯"階段已經被解釋過, js會跳過function(){//code}, 試圖去執行();, 故會報錯;
    當js執行到(function {// code})();時, 因爲(function {// code})是表達式, js會去對它求解獲得返回值, 因爲返回值是一 個函數, 故而遇到();時, 便會被執行.插件

   另外, 函數轉換爲表達式的方法並不必定要靠分組操做符(),咱們還能夠用void操做符,~操做符,!操做符……code

如:string

! function (){  
   alert( "另類的匿名函數自執行" );   
}();
相關文章
相關標籤/搜索