Это происходит потому, что когда вы вызываете p1()
без аргумента, вы фактически выполняете p1(undefined)
.Поэтому ваш массив выглядит следующим образом: ["One", "Two", "Three", undefined]
и объединяется как One/Two/Three/
Демонстрация:
var makePath;
function makePath(separator) {
let comp = []
return function(element) {
console.log(`pushing "${element}" to array`)
comp.push(element)
return comp.join(separator)
}
}
var main = function() {
var p1 = makePath("/");
p1("One");
p1("Two");
p1("Three");
window.console.log("p1:" + p1());
}
main()
Решение: если аргумент не передан, не помещайте его в массив:
var makePath;
function makePath(separator) {
let comp = []
return function(element) {
if(element) comp.push(element)
return comp.join(separator)
}
}
var main = function() {
var p1 = makePath("/");
p1("One");
p1("Two");
p1("Three");
window.console.log("p1:" + p1());
}
main()