两者之间有什么区别..函数中的参数和参数

What's the difference between ...args and arguments in a function

本文关键字:参数 函数 什么 区别 两者之间      更新时间:2023-09-26

两者有什么区别

function(...args) {
  // args is an array
}

function() {
  // arguments is an array-like
}

由于将类数组转换为数组非常容易,还有其他区别吗?

一个类似的问题:

myFunction.apply(null, args);

myFunction(...args);
  1. ...args是新的;直到 ES6 才可用
  2. 您可以将其用于参数结构的一部分:function(foo, bar, ...others)
  3. 你得到一个数组,所以不再Array.prototype.slice.call(arguments, 0)
  4. ...args对代码阅读器来说更明显
  5. 现在我们有了火柴和打火机,我们不需要摩擦棍子生火

但是,作为 1 的推论,并非所有内容都支持它。

Re:apply()和传播之间的差异(当传递null或例如thisArgapply()时,如示例中所示):

myFunction.apply(null, args);
myFunction(...args);

除了 spread 是新的,所以目前没有那么广泛支持之外,apply() 接受数组或类似数组的参数对象,而 spread 将适用于任何可迭代对象。例如,您可以将SetMap作为参数传播,而不能将其作为argArray参数传递给apply()(尽管您当然可以将其作为参数传播到 call()myFunction.call(whatever, ...someIterable) )。

由于将类数组转换为数组非常容易,还有其他区别吗?

arguments来说,这真的不是那么容易.做错了(或者可能根本做错了)会导致JS引擎去优化功能,如果有正确的方法可以避免它需要烦人的样板来做到这一点。