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

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

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

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

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

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

26
задан Cipi 5 August 2011 в 16:56
поделиться

4 ответа

Вы можете сделать то, что вы хотите, следующим образом:

// Do definition and execution at the same time.
var someFunction = (function someFunction() {

    // do stuff
    return someFunction
 })();

 console.log(someFunction)

arguments.callee не поддерживается в строгом режиме JavaScript.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode

6
ответ дан 28 November 2019 в 07:07
поделиться

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

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
0
ответ дан 28 November 2019 в 07:07
поделиться

Также возможно просто вернуть аргумент самовозглашаемой функции, например

console.log( (function(a) {  return a; })(1) ); // returns 1
0
ответ дан 28 November 2019 в 07:07
поделиться

Даже более того, что все вышеперечисленное:

f=()=>f
1
ответ дан 28 November 2019 в 07:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: