2013-02-13 64 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