Подтвердить что ты не робот

Может ли функция JavaScript вернуться сама?

Могу ли я написать функцию, которая возвращает его?

Я читал некоторое описание на закрытии - см. пример 6 - где функция возвращала функцию, поэтому вы могли бы вызвать func()(); как действительный JavaScript.

Итак, мне было интересно, может ли функция вернуть себя таким образом, что вы могли бы привязать ее к себе бесконечно следующим образом:

func(arg)(other_arg)()(blah);

Использование объекта arguments, вызываемого абонента или вызывающего абонента?

4b9b3361

Ответ 1

Есть 2-3 пути. Один из них, как вы говорите, заключается в использовании arguments.callee. Это может быть единственный способ, если вы имеете дело с анонимной функцией, которая не хранится назначенной переменной где-то (что вы знаете):

(function() {
    return arguments.callee;
})()()()().... ;

Второй должен использовать имя функции

function namedFunc() {
    return namedFunc;
}
namedFunc()()()().... ;

И последнее заключается в использовании анонимной функции, назначенной переменной, но вы должны знать эту переменную, поэтому в этом случае я не вижу причин, почему вы не можете просто дать функции имя и использовать метод выше

var storedFunc = function() {
    return storedFunc;
};
storedFunc()()()().... ;

Все они функционально идентичны, но callee является самым простым.

Изменить: И я согласен с SLaks; Я не могу рекомендовать его

Ответ 2

Да.
Просто return arguments.callee;


Однако это, вероятно, приведет к очень запутанному коду; Я не рекомендую его.

Ответ 4

Существует простой способ добиться этого, выполнив следующие действия:

let intArr = [];
function mul(x){
    if(!x){
        return intArr.reduce((prev, curr) => prev * curr)
    }
    intArr.push(x);
    return mul;
}

console.log(mul(2)(4)(2)()); => outputs 16

Ответ 5

Также можно просто вернуть аргумент self invokable function like

console.log( (function(a) {  return a; })(1) ); // returns 1