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, время: 15:04. |