JS中括號的用法


轉自:http://blog.csdn.net/hongmin118/article/details/4584023

我們在一些JS代碼中經常可以看到這樣的用法 :
(function(){})();
那這些括號是做什么用的呢?
下面我們來測試一下就知道了

(function(){alert('zol');});
運行后,沒有反映(相當於第一函數)

(function(){alert('zol');})();
運行后,彈出 zol

(function(){alert('zol');})(alert('wiki'));
運行后,先彈出wiki,再彈出zol

(function(){alert('zol');})(alert('wiki'););
出錯,什么也不運行。

我們從第二個可以看出,第一個括號中的匿名函數執行了,說明第二個括號是用於執行操作,這和我們調用函數的用法一樣,比如定義了一個function a(){};我們調用a這個函數是 a();那么a就和這個例子中的第一個括號代表的意思相同,是一個函數體,只是沒有名字,我們也叫他匿名函數。
第三個代碼中先彈wiki,說明alert('wiki')是先執行,這個是做為第一個括號的函數的參數來運行了,如果給參數后加分號,當然就出錯了,所以第四個代碼就不運行了。

==================華麗的分隔符========================================

轉自:http://segmentfault.com/q/1010000000117476

一般看JQuery插件里的寫法是這樣的

(function($) {         
  //...  
})(jQuery);

今天看到bootstrap的javascript組件是這樣寫的

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

為什么要在前面加一個 " ! " 呢?

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

function fnA(){alert('msg');}//定義函數
var fnB = function(){alert('msg');}//匿名函數

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

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

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

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

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

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

這些有一篇非常詳細的文章,推薦閱讀:http://www.swordair.com/blog/2011/10/...


免責聲明!

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



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