Вход

Просмотр полной версии : Рекурсия анонимной ф-ции


ntro123
27.12.2011, 19:29
Как сделать рекурсию анонимной функции?

$('#go').live('click', function(){
alert('!');
//рекурсия
});


спасибо.

B@rmaley.e><e
27.12.2011, 19:44
Y-комбинатор или arguments.callee.

trikadin
27.12.2011, 20:41
$('#go').live('click', function rec(){
alert('!');
rec();
});
Так, например...

melky
27.12.2011, 22:58
2 варианта :


используя имя функции (если есть)
см. вариант от trikadin
используется ссылка на исполняемую функцию. (нет имени у ф-и)
$('#go').live('click', function (){
alert('!');
arguments.callee();
});

trikadin
27.12.2011, 23:06
используется ссылка на исполняемую функцию. (нет имени у ф-и)
Тут неплохо бы добавить, что так в последнее время не рекомендуется делать))

melky
27.12.2011, 23:09
Тут неплохо бы добавить, что так в последнее время не рекомендуется делать))
вот ты неплохо и добавил :) а как ещё вызвать анонимную функцию ?

и вообще, реализовать такое в IE ?


var rec = function *!*recursion*/!*(n){ return n == 1 ? n : n**!*recursion*/!*(n-1); };


PS он вроде как такое не переваривает : присваивание переменной функции со своим именем и использование этого имени внутри функции.

trikadin
27.12.2011, 23:19
PS он вроде как такое не переваривает : присваивание переменной функции со своим именем и использование этого имени внутри функции.
Попробовал в восьмом - переваривает)

FINoM
28.12.2011, 07:18
arguments.callee();Пардон за оффтоп. Почему callee считается непроизводительным?

Kolyaj
28.12.2011, 09:30
он вроде как такое не переваривает
Он такое переваривает, но переменная с именем этой функции попадает во внешний скоп.
(function() {
(function test() {});
alert(typeof test == 'undefined' ? 'У вас не IE' : 'У вас IE');
})();

Nekromancer
28.12.2011, 10:33
FINoM,
оно не считается не производительным. Просто если этот код случайно попадёт в strict mode, он вызовет ошибку.

Kolyaj
28.12.2011, 10:34
Просто если этот код случайно попадёт в strict mode, он вызовет ошибку.
потому что считается непроизводительным. Просто JIT компиляторы его почему-то не могут заоптимизировать. Что-то у них там не сходится.

Nekromancer
28.12.2011, 10:44
Kolyaj,
странно вообще.