从这里学习Javascript函数 - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions
我无法理解这个概念 - 如何将逗号分配给分隔符?
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');
,
4
red, orange, blue,
答案 0 :(得分:1)
因为这是你的功能签名的第一个参数
$ python -m cProfile -s cumtime h.py | head -n 20
[99999, 99998, 99997]
Took 0.255105018616 seconds
[99999, 99998, 99997]
Took 0.0103080272675 seconds
800007 function calls (750010 primitive calls) in 0.291 seconds
Ordered by: cumulative time
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.022 0.022 0.291 0.291 h.py:1(<module>)
49996 0.034 0.000 0.144 0.000 h.py:47(extract_min)
99995/49998 0.088 0.000 0.103 0.000 h.py:17(heapify)
49996 0.076 0.000 0.090 0.000 h.py:56(insert)
1 0.018 0.018 0.021 0.021 random.py:293(sample)
149975 0.015 0.000 0.015 0.000 {min}
299987 0.014 0.000 0.014 0.000 {len}
2 0.010 0.005 0.010 0.005 {sorted}
49996 0.004 0.000 0.004 0.000 {method 'pop' of 'list' objects}
49996 0.003 0.000 0.003 0.000 {method 'append' of 'list' objects}
50000 0.003 0.000 0.003 0.000 {method 'random' of '_random.Random' objects}
尝试将签名更改为myConcat(', ', 'red', 'orange', 'blue');
function myConcat(separator) {...}
,您将看到所有参数都按预期收到。
您甚至可以将签名写为function myConcat(separator, arg1, arg2, arg3)
。并调用该功能
因为,JS不进行类型检查。
但是,您仍然可以检查函数中使用function myConcat()
调用函数的参数数量。
供参考:
https://www.w3schools.com/js/js_function_parameters.asp
Function arguments
答案 1 :(得分:1)
让我们想象arguments
不存在。然后就可以写出这样的函数:
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;
}
现在很清楚,myConcat函数有一个名为seperator
的参数,后跟一个所谓的rest parameter
数组。这意味着无论何时调用该函数,第一个参数都会传递给seperator,并且所有以下参数都会收集在array
数组中。
myConcat(/*seperator*/ "a",/*...array*/ "b", "n", "n", "!");
当你来自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;
}
}
答案 2 :(得分:1)
myConcat(', ', 'red', 'orange', 'blue');
这里,第一个参数是,
,实际上是分隔符的值 function myConcat(separator){...}
当你遍历参数时,循环从索引1
开始,而不是从0
开始(注意,参数[0]实际上是你的分隔符)
for (i = 1; i < arguments.length; i++) {
result += arguments[i] + separator;
}
答案 3 :(得分:0)
<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>