Вы также можете устранить эту внешнюю функцию, используя Function.prototype.bind
(либо версию библиотеки Prototype, либо родную версию ECMAScript 5, если ваш браузер поддерживает ее). Например:
function handler(myBoolean) {
console.log(myBoolean); // will output true
}
$(function() {
$('#test').click(handler.bind(this, true));
});
Первый аргумент bind
контекст вы хотите, чтобы выполнить функцию внутри. Последующие параметры передаются в функцию handler
. Когда jQuery выполняет handler
в качестве обратного вызова, вызовы функций отображаются в процентах, а передаваемые параметры будут привязаны к тем, которые вы указали в своем вызове bind
. Таким образом, в моем примере handler
получит три параметра, когда вы нажмете на #test
: логический объект, который вы передали, объект события и элемент DOM, который был нажат.
jQuery имеет приблизительный эквивалент bind
с его функцией $.proxy
. По умолчанию он не позволяет выполнять функции, такие как bind
, но кто-то wrote an extension to it, который даст ему эту функциональность.
По моему мнению, bind
- лучший выбор, чем $.proxy
, поскольку он имеет более чистый синтаксис, не требует от вас патча jQuery для обезьян и будет поддерживаться браузерами, как только ECMAScript 5 будет полностью реализован.
Что случилось с тем, что у вас там есть? Мне кажется, что это довольно идиоматический javascript. –