javascript - 面试题,求解析过程
大家讲道理
大家讲道理 2017-04-11 12:46:01
[JavaScript讨论组]
    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));
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(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++的问题

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号