Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Рекурсия анонимной ф-ции (https://javascript.ru/forum/jquery/24365-rekursiya-anonimnojj-f-cii.html)

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

Цитата:

Сообщение от ntro123
$('#go').live('click', function rec(){
alert('!');
rec();
});

Так, например...

melky 27.12.2011 22:58

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

trikadin 27.12.2011 23:06

Цитата:

Сообщение от melky
используется ссылка на исполняемую функцию. (нет имени у ф-и)

Тут неплохо бы добавить, что так в последнее время не рекомендуется делать))

melky 27.12.2011 23:09

Цитата:

Сообщение от trikadin (Сообщение 146607)
Тут неплохо бы добавить, что так в последнее время не рекомендуется делать))

вот ты неплохо и добавил :) а как ещё вызвать анонимную функцию ?

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

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


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

trikadin 27.12.2011 23:19

Цитата:

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

Попробовал в восьмом - переваривает)

FINoM 28.12.2011 07:18

Цитата:

Сообщение от melky
arguments.callee();

Пардон за оффтоп. Почему callee считается непроизводительным?

Kolyaj 28.12.2011 09:30

Цитата:

Сообщение от melky
он вроде как такое не переваривает

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

Nekromancer 28.12.2011 10:33

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


Часовой пояс GMT +3, время: 10:24.