第81题 下面这道题输出什么

    function f1() {
      var sum = 0
    
      function f2() {
        sum++
        return f2
      }
    
      f2.valueOf = function () {
        return sum
      }
    
      f2.toString = function () {
        return sum + ''
      }
    
      return f2
    }
    
    console.log(+f1()) // 0
    console.log(+f1()()) // 1
    console.log(+f1()()()) // 2

这道题目考了闭包、运算符优先级、隐式转换。()优先级大于+,当+f1()的时候,先执行f1()返回f2,遇到+,会试图隐式转换为数字,此时去调用valueOf(试图转数字会调用valueOf,试图转字符串会调用toString这是js的规定)返回sum即为0,后面多次执行依次类推

Last Updated:
Contributors: leeguooooo