面试题,求解析过程

    function add(m){
        return function(n){
            return n+m++;
        }
    }

    var add1=add(070);
    var add2=add(050);
    console.log(add1(010));
    console.log(add2(010));
阅读 3.3k
5 个回答
var add1=function(n){
    var m = 070
    return n+m++
}

add1(010) = 070+010 = parseInt(70,8) + parseInt(10,8) = 64
var add2=function(n){
    var m = 050
    return n+m++
}

add2(010) = 050+010 = parseInt(50,8) + parseInt(10,8) = 48

解析什么?不就是两个8进制数相加吗? ++在后面,相当于没有。

两个8进制数相加。

当数字以0开头的时候,数字是八进制而非十进制,070实际上就是十进制的56,以add1为例,
当执行完 var add1=add(070);这句时,返回一个functionadd1等价于:

function add1(n){
 var m =56;
  return n+m++;
}

然后执行add1(010)时,010实际上就是十进制的8

add1(8);//返回值:8+56,即64 

add2解析过程同上,050就是十进制的40

本题考查的是闭包和进制换算问题,在js中070表示的是8进制,转换成十进制就是56,050表示的是40

function add(m){
    return function(n){
        return n+m++;
    }
}

var add1=add(070); //add1 = [func], m = 56
var add2=add(050); //add2 = [func], m = 40
console.log(add1(010)); //add1(8), n = 8, result = 64
console.log(add2(010)); //add2(8), n = 8, result = 48

至于为什么不是65,这就是++xx++的问题

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