2013-02-13 49 views
3

雖然挖到uniform.js源代碼,我發現這個(在線#333):我想了解的優化改進縮小在JavaScript

/** 
* Meaningless utility function. Used mostly for improving minification. 
* 
* @return false 
*/ 
function returnFalse() { 
    return false; 
} 

此功能在一些地方被稱爲(這一趨勢似乎要在一個false值是一個JavaScript對象常量像這樣使用(從線#351

bindMany($elem, options, { 
    'selectstart dragstart mousedown': returnFalse 
}); 

但沒有明確回來,在那裏虛假情況的情況。我的問題是,爲什麼這是爲了改善縮小嗎?我的第一個想法是,通過將false拉入函數中,該函數可以被重命名爲'a',因此預期false的位置可以被表示爲a(),但是這對於我所提供的內容似乎沒有多大好處認爲是執行中額外功能的代價。有什麼更明顯的,我不明白這一點?

+2

我相信比放置一個匿名函數會返回false更好。從我記得,jQuery在內核中還有一個'returnFalse()'函數。 **編輯:**是的,它仍然在版本[1.9.1](http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js)中執行。 – 2013-02-13 22:00:21

+0

哦,我沒有注意到函數被返回,而不是它的返回值 – 2013-02-13 22:01:36

+0

顯然,如果代碼做了我認爲的事情,你綁定了一個處理程序來返回false的事件,並通過在事件處理程序中返回false jQuery實際上和調用'event.preventDefault()'和'event.stopPropagation()'是一樣的。 – 2013-02-13 22:02:42

回答

6

你應該注意,在你的例子中returnFalse沒有被調用,它正在通過。它被用來防止提供的事件的默認行爲。

具有實用功能,防止默認行爲的這種技術可防止需要創建新的匿名功能,同樣的事情多次做:

$('foo').on('something', function() { 
    return false; 
}); 
//minified to something like: 
$(a).on(b,function(){return !1}); 

VS

$('foo').on('something', returnFalse); 
//minified to something like: 
function c(){return !1} 
$(a).on(b,c); 

這一切都這樣說,這是一個誤導性的縮小手段,因爲jQuery允許false代替事件處理程序來防止默認行爲:

$('foo').on('something', false); 
//minified to something like: 
$(a).on(b,!1); 
+0

謝謝代碼分解:) – 2013-02-13 22:06:50

+0

是'$(a).on(b,!1);'看起來像讀取google關閉的輸出。 '=]' – 2013-02-13 22:08:25