Javascript:参数 职能1 职能2

Javascript:参数 职能1 职能2,javascript,arguments,call,apply,Javascript,Arguments,Call,Apply,有人能告诉我为什么这两者有区别吗 非常感谢您不必将分隔符传递给函数,您也可以这样编写代码: function myConcat () { var args = Array.prototype.slice.call(arguments); return args.join(', '); } var a = myConcat("red", "orange", "blue"); console.log(a); 问题变了,答案也变了 在函数1中,让我们决定使用哪个分隔符,将其作为第一个参数

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


非常感谢

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

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

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

console.log(a);

问题变了,答案也变了

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

但是,如果第一个参数是要使用的分隔符,则无需定义它即可获得相同的结果:

函数myConcat(){
//在数组中变换类数组对象
var args=Array.prototype.slice.call(参数,0);
//拆下第一个元素并将其用作分隔符
var separator=args.shift();
//使用分隔符连接其他参数
返回args.join(分隔符);
}
var a=myConcat(“,”红色“,”橙色“,”蓝色“);
document.getElementById('result').innerHTML=a

它是第一个参数,您希望将其与其他参数区分开来
slice
正在从参数中删除第一个元素,即分隔符
。您可以使用
参数[0]
@abidibo读取分隔符,如果我不将任何内容作为参数,则结果不同。是的,但您可以这样做:@abidibo,但是你能告诉我为什么有参数和没有参数有区别吗?如下所示:您的代码将抛出异常参数have no join。这实际上是不同的,因为您无法决定使用哪个分隔符。您可以看看这个并告诉我为什么会有差异吗?您的示例之所以有效,是因为
join
js函数默认使用逗号分隔符,但在你的例子中,你不能决定使用哪个分隔符,总是逗号,而在我的例子中,你仍然可以决定将它作为第一个参数传递的分隔符。谢谢你花时间回答我的问题。但我还是不明白为什么这两个1,2之间有区别,为什么他们的行为不同?这里发生了什么?不同之处在于,在1中可以更改分隔符,在2中不能(使用默认的连接分隔符,即逗号)。在1中,调用传递逗号作为第一个参数的函数是有意义的,而在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);