ES6 immediately invoke recursive arrow function

前端 未结 3 1476
-上瘾入骨i
-上瘾入骨i 2021-02-13 13:53

This is my current code:

const fn = parameter => {
    // if, else ...
    fn(X);
};
fn(0);

Now, I can\'t use this approach as I need to cal

相关标签:
3条回答
  • 2021-02-13 13:54

    JavaScript provides a great solution for recursive functions: named function expressions. Hence I would recommend to use that instead of an arrow function:

    (function fn(parameter) {
      // if, else ...
      fn(x);
    })(0);
    
    0 讨论(0)
  • 2021-02-13 13:55

    First, let me put the disclaimer that Immediately-Invoked-Function-Expressions (IIFE) are considered bad practice in ES6, and this is tail-recursion and personally I would change it to a for loop.

    but you can always do this I guess:

    ((x) =>{ const fn=(p)=>{
           //whatever
           fn(q)
       }
       fn(x)
    })(0)
    
    0 讨论(0)
  • 2021-02-13 14:19

    If you want to call recursive an lambda expression or anonymous function you need Y combinator. For more details you can read http://mvanier.livejournal.com/2897.html

    For factorial it is like

    var Y = (proc) => {
      return ((x) => {
        return proc((y) => { return (x(x))(y);});
      })((x) => {
        return proc((y) => { return (x(x))(y);});
      });
    };
    
    var factorial = (fact) => {
     return (n) => {
      return (n === 0) ? 1 : n * fact(n-1);
     };
    };
    
    
    console.log( Y(factorial)(5) );

    For you code it will be like

    const fn = (func)=> {
    
        return (parameter) => {
           // if else
           func(X);
        }
    };
    
    Y(fn)(0);
    
    0 讨论(0)
提交回复
热议问题