Там нет никакого способа, что вызов cap_check
будет когда-либо предупреждения ничего, кроме undefined
. Функция не является статическим объектом. Когда вы вызываете функцию, она создает новый экземпляр во внутреннем стеке. row
будет инициализирован как undefined
, и новый обработчик клика будет привязан к td
элементам (также вряд ли будет полезно), поскольку каждый повторяющийся обработчик события будет связан каждый раз, когда вы вызываете cap_check
).
Скорее всего, вы хотите что-то вроде этого:
var cap_check=(function() {
var row;
$('td').change(function(){
row = $(this).parent().parent().children().index($(this).parent());
alert(row);
});
return function() {
alert(row);
};
}());
Это является прямоприменяемой функцией. Когда скрипт запускается, часть функции ПЕРЕД «возвратом» выполняется немедленно, создавая односвязное событие, и возвращает функцию, которая ссылается на экземпляр оригинальной функции. Это создает замыкание , что означает, что функция поддерживает ссылку на объекты своего родителя (в данном случае переменную row
). Поэтому ваш обработчик событий и функция, возвращаемая как cap_check
, теперь будут всегда ссылаться на тот же экземпляр row
.
Итак, теперь любой код, который вызывает cap_check
, всегда будет возвращать то же значение, что и в результате события change
.
Fiddle:
http://jsfiddle.net/RagUe/5/
(Обратите внимание, что я изменил событие "click" вместо "изменения", чтобы сделать его легко проверяемые).
не могли бы вы включить html, который идет с этим кодом – mcgrailm
взгляните на это сообщение. это то же самое. http://stackoverflow.com/questions/2611980/return-value-from-nested-function-in-javascript – JAiro
@JAiro: Нет, это не то же самое. –