2013-02-13 4 views
3

При копании в uniform.js исходный код, который я нашел это (на линии #333):Я пытаюсь понять оптимизацию для улучшения минификация в JavaScript

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

Эта функция вызывается в некоторых местах (тенденция кажется быть в ситуациях, когда значение false используется в JavaScript Object литерал, как это (от линии #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). –

+0

Ohh Я не заметил, что функция возвращалась, а не возвращаемое значение –

+0

Очевидно, что если код делает то, что я думаю, вы привязываете обработчик к тем событиям, которые возвращают false, и возвращая false внутри обработчика события в jQuery фактически совпадает с вызовом 'event.preventDefault()' и 'event.stopPropagation()'. –

ответ

6

Следует отметить, что в вашем примере returnFalse не звонит, он проходит. Он используется для предотвращения поведения по умолчанию предоставленных событий.

Этот метод, имеющий функцию полезности, чтобы предотвратить поведение по умолчанию предотвращает необходимость создания новых анонимных функций, чтобы сделать то же самое, несколько раз:

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

против

$('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

Благодарим вас за прорыв кода :) –

+0

Да '$ (a) .on (b,! 1);' похоже на чтение вывода google закрытия. '=]' –

Смежные вопросы