关于valueOf、toString还有及柯里化函数在不同浏览器下的输出问题?

写了一个函数,如下:

function add(){
    let arr = [];
    arr = arr.concat(Array.prototype.slice.apply(arguments))
    let fun = function(){
        arr = arr.concat(Array.prototype.slice.apply(arguments))
        return fun
    }
    fun.toString = function(){
        console.log(222)
        return arr.reduce(function(total, num){
            return total+num
        }, 0)
    }
    return fun
}
console.log(add(1,2)(2,3)(3))

函数的作用就是累加参数求值,但是问题来了,下面是chrome的输入:

clipboard.png

有两个问题:

  1. 为什么不是直接输出11,而是f 11
  2. 为什么不是先输出222呢,感觉是要先做类型转换再打印呢

问题并没有结束,同样的代码在FF上的输出:

clipboard.png

怎么把fun函数输出来了......

还有node输出:

clipboard.png

彻底懵逼了......

阅读 2.3k
2 个回答

f 11 在chrome里面就是输出函数字面量的意思吧?

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