How to Do Recursion in JavaScript Object Literal Method?

Learn how to write recursive functions in a JavaScript object literal

You can create recursive functions in a JavaScript object literal in the following ways:

Using a Named Function Expression

To do recursion and call the current function name inside the function body, you can simply create a named function expression. This makes the name of the function be available only locally, within the function body (scope). For example:

const math = {
  calcFactorial: function factorial(n) {
    if (n <= 1) {
      return 1;
    }
    return n * factorial(n - 1);
  }
};

console.log(math.calcFactorial(3)); // 6

Using a Named Function Defined Outside the Object Literal Scope

You could simply define or declare a function outside, and then add the function to relevant object property, for example, like so:

// using function expression
const calcFactorial = function(n) {
    if (n <= 1) {
      return 1;
    }
    return n * calcFactorial(n - 1);
};

const math = {
  calcFactorial,
};

console.log(math.calcFactorial(3)); // 6

You can achieve the same using a function declaration, for example, like so:

// using function declaration
function calcFactorial(n) {
    if (n <= 1) {
      return 1;
    }
    return n * calcFactorial(n - 1);
};

const math = {
  calcFactorial,
};

console.log(math.calcFactorial(3)); // 6

Referring to the Object Method Using this

"this" inside the object literal will, by default, refer to the object to which the method belongs to:

const obj = {
    foo: function() {
        return this;
    },
};

console.log(obj.foo() === obj); // true

Please note that this bounded to the method context could be different depending on how the object method is called. For example, this could be the case if the object method is called using obj.foo.call(), obj.foo.apply() or obj.foo.bind(). Therefore, using this method to do recursion, might not be the best idea.

If you are certain the object method won't be called with an explicitly bounded context, then you can do recursion inside the object method by using this to refer to the current method on the object, for example, like so:

const math = {
  calcFactorial: function(n) {
    if (n <= 1) {
      return 1;
    }
    return n * this.calcFactorial(n - 1);
  }
};

console.log(math.calcFactorial(3)); // 6

Hope you found this post useful. It was published . Please show your love and support by sharing this post.