Всем привет!
Как известно, 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();