2 个回答

单纯看报错信息是死循环了。

Uncaught RangeError: Maximum call stack size **exceeded**

修改成这样就可以了

var add = function (a,b){
  return (a&b) === 0 ? a^b : add((a&b) << 1, a^b)
}

主要出的问题是运算符的优先级的问题,比较运算符 会优先于 位运算符
所以实际上你的三元表达式的判断条件是这样执行的 a & (b === 0)
所以除非执行的时候 b 传入的是 0 否则就永远没办法返回 true 值了。

function add(a,b){
  while(b != 0){
    sum = a ^ b;
    c = (a & b) <<1;
    a = sum;
    b = c;
  }
  return a;
}

递归是有stack限制,某些情况用循环解决这个问题。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏