Underscore 是一個很是實用的Javascript類庫。html
經過研究他能提升自身的JS水平。瀏覽器
咱們看到整個代碼被 (function() { /* 代碼 */ }.call(this)); 包裹了起來。函數
(function() { // 代碼 }.call(this));
這是什麼意思?做用是什麼?先不着急,咱們經過一個個例子來學習。學習
這個其實很好理解this
// 這是一個普通函數 var a = function(){ alert("11") }
若是運行這段JS腳本,不會彈出11。由於沒有調用a函數。spa
可是注意若是函數名後面添個(),就會當即運行這個函數code
var a = function(){ alert("11") } a()
函數通常是有名字的,好比上面的函數就叫a,沒有名字的函數叫匿名函數。咱們知道JS支持匿名函數。htm
JS中當一個匿名函數被括起來,而後再在後面加一個括號,這個匿名函數就能當即運行起來!對象
//當即彈出11 (function (){ alert("11") })()
underscore的代碼包裹在一個匿名自執行函數中。不少類庫jQuery都是這麼作。blog
好處:
1. 由於會當即執行,避免變量污染
(function() { var jQuery = { VERSION : '1.0', a: function(){ alert("11"); } }; window.jQuery = jQuery; $ = jQuery; })(); //$.a() $.VERSION;
//而call(this)方法,是指當定義完後將this自己經過call()調用自己來實現當即執行。
//在瀏覽器環境 全局this 就是window對象
(function(){ //執行語句 }).call(this)