什么是... args和函数中的参数之间的区别

时间:2016-04-28 01:07:40

标签: javascript function ecmascript-6

之间的区别是什么
 $('#datetimepicker').datetimepicker({
   inline:true,
   format: 'DD/MM/YYYY',
   daysOfWeekDisabled: [0, 6]
 });

 $("#datetimepicker").click(function(){
    var dateData = $('#datepicker-data').val();
    alert(dateData);            
 });

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

由于将数组转换为数组很容易,还有其他差异吗?

类似的问题:

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

myFunction.apply(null, args);

2 个答案:

答案 0 :(得分:6)

  1. ...args是新的;直到ES6
  2. 才可用
  3. 您可以将其用作参数结构的一部分:function(foo, bar, ...others)
  4. 你得到一个数组,所以不再有Array.prototype.slice.call(arguments, 0)
  5. ...args对代码读者来说更为明显
  6. 既然我们有火柴和打火机,我们就不需要用棍棒擦火了
  7. 然而,作为1 not everything supports it yet的必然结果。

答案 1 :(得分:2)

Re:apply()和点差之间的差异(传递nullthisArgapply()时的差异,如示例所示):

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

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

  

由于将数组转换为数组很容易,还有其他差异吗?

对于arguments而言,这并不容易。做错了(或者可能根本没有)会导致JS引擎取消优化函数,如果有正确的方法可以避免它需要烦人的样板来执行它。