记录一个箭头函数执行很奇怪的事情

86 阅读1分钟

不使用函数:

 function add() {
            let arg = Array.prototype.slice.call(arguments)
            let _adder = function () {
                arg.push(...arguments)
                return _adder;
            }

             _adder.toString = function () {
                return arg.reduce(function (a, b) {
                    return a + b
                })
            }
            return _adder;
        }
        console.log((add(1)(2)(3)).toString())

执行结果:6
使用箭头函数:

    function add() {
            let arg = Array.prototype.slice.call(arguments)
            let _adder = () => {
                arg.push(...arguments)
                return _adder;
            }

             _adder.toString = function () {
                return arg.reduce(function (a, b) {
                    return a + b
                })
            }
            return _adder;
        }
        console.log((add(1)(2)(3)).toString())

执行结果:3

打断点调试才发现:

 let _adder = () => {
                arg.push(...arguments)
                return _adder;
          }

箭头函数没有自己的arguments,查资料发现箭头函数没有自己的this,arguments,super或new.target。