js箭头函数不能像常规函数一样访问参数对象

使用普通函数时,您可以使用参数隐式对象来查看给定的参数:

function myFunction() {
    console.log(arguments);
}
myFunction('a', 'b');
// logs { 0: 'a', 1: 'b', length: 2 }

js箭头函数不能像常规函数一样访问参数对象

箭头函数中,这将导致意想不到的结果:

function myFunction() {
    const arrowF = () => console.log(arguments);
    arrowF('c', 'd');
}

myRegularFunction('a', 'b'); 
// will log { 0: 'a', 1: 'b', length: 2 } 
// insead of the expected { 0: 'c', 1: 'd', length: 2 }

这是因为箭头函数没有参数对象。他们也没有自己的 this 上下文,因此参数是来自 myRegularFunction 上下文的参数。

但是,我们可以使用 rest 参数在箭头函数中传播参数:

function myRegularFunction() {
    const arrowF = (...args) => console.log(args); 
    arrowF('c', 'd');
}
myRegularFunction('a', 'b'); 
// logs ['c', 'd']

我们甚至可以制作一些很酷的东西,比如将常规参数与rest参数结合起来:

function multiplyTheSum(multiplier, ...numbers) {
    console.log(multiplier); // 2
    console.log(numbers);    // [10, 20, 30]
    const sum = numbers.reduce((s, n) => s + n);
    return multiplier * sum;
}
multiplyTheSum(2, 10, 20, 30); // => 120

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 ttt5cn@163.com 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论