Javascript:参数

Javascript: Arguments

函数 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");

谁能告诉我为什么这两者有区别?

非常感谢

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

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

var a = myConcat("red", "orange", "blue");

console.log(a);

问题变了,答案也变了。

在 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>

此处使用 shift 函数获取分隔符,该函数删除并 returns 数组的第一个元素。

如果您想知道 slice 部分到底在做什么,只是将 arguments 类似数组的对象转换为真正的数组

2中分隔符是固定的,是js join函数默认的分隔符,是逗号。还调用 2 传递逗号作为第一个参数是无意义的,并且要写 2 有某种意义,你应该做这样的事情:

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

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