1

При привязке обработчиков событий я нашел необходимость создания функции, так как ей нужно будет ссылаться дважды; как только на начальном этапе, и один раз в случае связывания:Может ли анонимная функция javascript вернуть себя?

// Define function 
function doSomething(){...} 

// Call function initially 
doSomething(); 

// Pass function as the event handler 
$("#theElement").on("click", doSomething); 

Но потом я понял, что я мог бы начать делать это, передавая самоосуществляющийся анонимную функцию в качестве обработчика событий и возвращение arguments.callee:

// Much cleaner! 
$("#theElement").on("click", (function(){ 
    ... 
    return arguments.callee; 
})()); 

Предполагая что я никогда не использую эту функцию за пределами этих двух экземпляров, хорошо ли это делать?

+0

Что легче понять и сохранить? Это должно быть вашей главной директивой. –

+0

Оба в порядке. это зависит от тебя. как и что вам нужно. –

+1

Ну, 'arguments.callee' устарел и запрещен в ECMAScript 5th Edition в Strict Mode, поэтому, вероятно, его следует поэтапно отключить. (Ссылки: [MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments/callee), который ссылается сюда, на: «[Почему были аргументы .callee.caller' устарело в JavaScript?] (http://stackoverflow.com/questions/103598/why-was-the-arguments-callee-caller-property-deprecated-in-javascript/235760#235760) ") –

ответ

1

Ну, большинство людей будет просто придерживаться первого блока, потому что это ясно, просто и идиоматично. Второй блок сохраняет одну строку кода, но стоимость - это код, который делает что-то странное. Если ваш код делает что-то странное, многие читатели, вероятно, неправильно понимают его поведение, и любые изменения, которые они вносят, скорее всего, приведут к дефектам.