Javascript: Arguments

Javascript: Arguments

本文关键字:Arguments Javascript      更新时间:2023-09-26

函数1

function myConcat (separator) {
    var args = Array.prototype.slice.call(arguments, 1);
    return args.join(separator);
}
var a = myConcat(", ", "red", "orange", "blue");

功能2

function myConcat () {
    var args = Array.prototype.slice.call(arguments, 1);
    return args.join();
}
var a = myConcat(", ", "red", "orange", "blue");

有人能告诉我为什么这两者之间有区别吗?

非常感谢

问题变了,答案也变了。

在1中,函数让您决定使用哪个分隔符,并将其作为第一个参数。您不需要定义分隔符参数,但出于可读性的原因,这可能很方便,也就是说,查看函数的程序员可以立即理解第一个参数是使用的分隔符。

同样的结果也可以在不定义它的情况下实现,只需假设第一个参数是要使用的分隔符:

   function myConcat () {
     // transform array like object in array 
     var args = Array.prototype.slice.call(arguments, 0);
     // remove first element and use it as separator
     var separator = args.shift();
     // join other arguments with separator
     return args.join(separator);
   }
   var a = myConcat(", ", "red", "orange", "blue");
   document.getElementById('result').innerHTML = a;
<div id="result"></div>

这里的分隔符使用CCD_ 1函数,该函数移除并返回数组的第一个元素。

如果你想知道slice的部分到底在做什么,就是简单地将类似arguments阵列的对象转换为真正的阵列

在2中,分隔符是固定的,是js join函数的默认分隔符,它是逗号。同时调用2并将逗号作为第一个参数也是NONSENSE,要编写有意义的2,您应该这样做:

function myConcat () {
  var args = Array.prototype.slice.call(arguments, 0);
  return args.join();
}

然后这样称呼它:var a = myConcat("red", "orange", "blue");

您不必将分隔符传递给函数,您也可以这样编写代码:

function myConcat () {
  var args = Array.prototype.slice.call(arguments);
  return args.join(', ');
}
var a = myConcat("red", "orange", "blue");
console.log(a);