Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将此函数作为分隔符和参数传递_Javascript - Fatal编程技术网

Javascript 如何将此函数作为分隔符和参数传递

Javascript 如何将此函数作为分隔符和参数传递,javascript,Javascript,从这里学习Javascript函数- 我无法理解这个概念-逗号是如何分配给分隔符的 function myConcat(separator) { console.log(separator); // , -> how was this interpreted as comma? console.log(arguments.length); // 4 var result = ''; // initialize list var i; // iterate

从这里学习Javascript函数-

我无法理解这个概念-逗号是如何分配给分隔符的

 function myConcat(separator) {

   console.log(separator); // ,  -> how was this interpreted as comma?
   console.log(arguments.length); // 4
   var result = ''; // initialize list
   var i;
   // iterate through arguments
   for (i = 1; i < arguments.length; i++) {
      result += arguments[i] + separator;
   }
   return result;
}

myConcat(', ', 'red', 'orange', 'blue');

因为这是函数签名的第一个参数

myConcat(', ', 'red', 'orange', 'blue');

function myConcat(separator) {...}
尝试将签名更改为
函数myConcat(分隔符,arg1,arg2,arg3)
,您将看到所有参数都按预期接收

您甚至可以将签名写成
函数myConcat()
。并调用该函数。
因为JS不做类型检查。 但是,您仍然可以检查函数中使用
arguments.length
调用函数的参数数量

更多参考:


让我们想象一下
参数不存在。然后我们可以这样编写函数:

function myConcat(separator, ...array) {
  var result = ""; // initialize the resulting string
  // iterate over the array
  for (let i = 0; i < array.length; i++) {
    result += array[i] + separator;
   }
   return result;
}

由于您来自java背景,同样用java编写的代码应该是:

class Helpers {
  static String myConcat(String seperator, String[] ...array){
    String result = "";
    for(int i = 0; i < array.length; i++)
      result += array[i] + seperator;
    return result;
  }
}
类助手{
静态字符串myConcat(字符串分隔符,字符串[]…数组){
字符串结果=”;
for(int i=0;i
这里,第一个参数是
,它实际上是分隔符
函数myConcat(separator){…}

在遍历参数时,循环从索引
1
开始,而不是从
0
开始(注意,参数[0]实际上是分隔符)

for(i=1;i

函数数组(分隔符,…数组){
var result=”“;//初始化结果字符串
//迭代数组
for(设i=0;i
它是第一个(也是唯一命名的)参数。将它更改为其他参数,您将看到它并不像您认为的那样是其他参数的分隔符。我认为学习
参数
对象是一个错误。只要忽略它,你就不会错过它…试试myConcat(“红色”、“橙色”、“蓝色”)和逗号将消失!非常感谢您提供的详细信息,我明白为什么我会得到那个o/p。然而,与Java相比,在Java中我们清楚地提到了我的第一个参数是String,第二个参数是Array。但是在这里,所有的参数都是字符串,我们必须将其解释为字符串参数后跟字符串数组(通过查看函数声明),尽管我们没有使用
[]
new array[]
@spiderman显式声明数组。spread属性自动是一个值数组(数组是无类型的,因此可以有混合类型)并且
参数
自动成为类似于数组的对象。您还可以执行
myConcat(1,2,3,4)
这太棒了,除了OP之外,您实际上还介绍了很多方面。出于好奇,我尝试在函数声明末尾传递另一个值,结果得到错误
Rest参数必须是最后一个形式参数,这就解释了。谢谢,还尝试了传递混合类型:)谢谢您的帮助,我现在明白了,即使我没有在函数声明中声明任何参数,
arguments
object也可以识别传递的值。如果我声明,它的值将按照声明的顺序排列,在本例中,声明的分隔符取逗号值。我尝试了
函数myConcat(separator,second)
console.log(second)
打印
second
。当我打印参数时,谢谢@Sajib。长度我得到了4,所以我知道参数[0]是逗号,但我无法说明逗号(为什么只有逗号)是如何分配给分隔符变量的。。现在所有的解释都清楚了输出:香蕉!这里,简单地说,a用作分隔符,因此在打印每个数组元素a之后。我建议您在任何编译器上运行此代码,并进行多次编辑和更改,这样您就可以轻松理解代码了。嗨,欢迎使用堆栈溢出。更新(和格式化)你的答案,不要自己添加评论。
 myConcat(/*seperator*/ "a",/*...array*/ "b", "n", "n", "!");
class Helpers {
  static String myConcat(String seperator, String[] ...array){
    String result = "";
    for(int i = 0; i < array.length; i++)
      result += array[i] + seperator;
    return result;
  }
}
myConcat(', ', 'red', 'orange', 'blue');
for (i = 1; i < arguments.length; i++) {
  result += arguments[i] + separator;
}
    <script>
 function array(separator, ...array) {
 var result = ""; // initialize the resulting string
   // iterate over the array
    for (let i = 0; i < array.length; i++) {
   result += array[i] + separator;
     }
      return result;
  }
   alert(array( "a",/*...array*/ "b", "n", "n", "!"));
  </script>