不用加号写加法,js这样写为什么栈溢出了?

作者站长头像
站长
· 阅读数 22

不用加号写加法,js这样写为什么栈溢出了?

回复
1个回答
avatar
test
2024-07-20

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

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 值了。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容