JSFiddle - React, Tailwind, and code Playground

HTML

<script>
decoupledTrampoline =
  fn => {
    class Thunk {
      constructor (fn, ...args) {
        this.fn = fn;
        this.args = args;
      }

      evaluate () {
        return this.fn(...this.args);
      }
    }

    const thunkify =
      fn =>
        (...args) =>
          new Thunk(fn, ...args);

    return (...initialArgs) => {
      let value =
        (x => x(x))(
          maker =>
            (...args) =>
              fn(thunkify(maker(maker)), ...args)
        )(...initialArgs);

      while (value instanceof Thunk) {
        value = value.evaluate();
      }

      return value;
    };
  };
  
isEven =
  decoupledTrampoline(
    (myself, n) => {
      if (n === 0)
        return true;
      else if (n === 1)
        return false;
      else return myself(n - 2);
    }
  );
  
isEvenLoop = (n) => {
  while(true) {
    if(n === 0)
      return true;
    else if (n === 1)
      return false;
    else
      n = n - 2;
  }
};

alert(isEvenLoop(1212121212));
alert(isEven(1212121212));

</script>