单纯看报错信息是死循环了。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限制,某些情况用循环解决这个问题。
单纯看报错信息是死循环了。
修改成这样就可以了
主要出的问题是运算符的优先级的问题,比较运算符 会优先于 位运算符。
所以实际上你的三元表达式的判断条件是这样执行的
a & (b === 0)
。所以除非执行的时候
b
传入的是0
否则就永远没办法返回true
值了。