Задача
Вы возвращаете функцию из самоисполняющейся анонимной функции, но нигде не возвращаете возвращаемое значение.
Упрощение вашего кода, это выглядит так:
/* some code here */
$(this).click(function(){
/** The following function is executed, returns result, but the
* result (a function) is not assigned to anything, nor returned
*/
(function(){
/* some code here */
return function(ctrl){
/* some code here */
};
}());
});
/* some code here */
Решение
Как правило, ваш код очень нечитабелен, вы должны улучшить его для своего же блага (и избегать таких проблем). Приведенную выше проблему можно быстро исправить, передав параметр в функцию, которая возвращает функцию (но не вызывала ее). Решение здесь: jsfiddle.net / scxNp / 13 /
Решение: объяснение
То, что я сделал, было просто - я заметил, что вы передаете this
функции из первого (рабочего) примера, но вы даже не выполняете эту функцию во втором (неправильном) примере. Упрощенное решение выглядит так:
/* some code here */
$(this).click(function(){
/** Now the result of the following function is also executed, with
* parameter passed as in your working example
*/
(function(){
/* some code here */
return function(ctrl){
/* some code here */
};
}())(this);
});
/* some code here */
Надеюсь, это имеет смысл:)
Ps. Я также обновил свой первый фрагмент кода, чтобы изменения были легко обнаружены:)
PS.2. Это всего лишь quickfix , и, как уже упоминалось выше, многое нужно сделать, чтобы сделать ваш код читабельным. Также каждая функция работает как замыкание , поэтому не злоупотребляйте самореализующимся (function(){/* your code */})();
, чтобы не назначать что-либо (это полезно, но достаточно одного раза для одного сценария). Вместо используйте существующие замыкания .