callee без arguments
Всем привет!
Как известно, 5-ая редакция спецификаций ECMAScript запрещает использовать arguments.callee(); в строгом режиме. Стоит избегать использования arguments.callee(); давая функций имя либо использовать определение функций, в котором функция вызывает сама себя. В стрелочной функций конечно же не существует arguments (Uncaught ReferenceError: arguments is not defined), да и давать имя такой функций ради рекурсивного вызова как-то не практично (засорение глобального или локального контекста переменными). Так как же вызвать анонимную функцию рекурсивно в строгом режиме? //В ES3 это было бы так (function() { arguments.callee(); })(); Я тут попытался повторить тоже самое, но без использования arguments.callee(); // Идея заключается в том, чтобы вызвать функцию, //которая в качестве аргумента принимает такую функцию А, //которую если вызвать, то она вызовет функцию Б, //вызывающей функцию В с аргументом В, где В является //аргументом той функций, которую вызывает А. "use strict"; ( f => ( g => f(() => g(g)) )( g => f(() => g(g)) ) )(a => a()); Или более приземлённый пример, который даже можно запустить... "use strict"; ( f => ( g => f(() => g(g)) )( g => f(() => g(g)) ) )(a => { console.log("Hello!"); setTimeout(a, 1000); }); А ты как вызываешь анонимную функцию рекурсивно в строгом режиме или что тут можно улучшить? P. S. В не стогом режиме Вы по прежнему можете использовать arguments.callee(); |
Что мешает сохранить ссылку на функцию и вызывать ее?)
|
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 16:46. |