我是JavaScript的新手,目前正在研究闭包。下面您可以看到我的代码,它应该打印任何给定的数组,并在每个元素之间使用指定的分隔符。问题是,如果我尝试创建一个数组并在makePath()函数中打印它,一切都会正常工作。但是当我尝试在main函数中做同样的事情时,它就是不起作用。我还有一个问题,当我尝试连接分隔符和数组时,分隔符被打印在列表的末尾,我不希望这样。
var makePath;
function makePath(separator) {
let comp = []
return function(element)
{
comp.push(element)
return comp.join(separator)
}
}
var path0 = makePath("/");
path0("A");
path0("B");
path0("C");
console.log("path 0 is " + path0());
var main = function() {
var path1 = makePath("/");
path1("A");
path1("B");
path1("C");
var path2 = makePath("-->");
path2("Berlin");
path2("San Francisco");
path2("Vancouver");
var path3 = makePath();
path3("A");
path3("B");
path3("C");
window.console.log("path 1 is " + path1());
window.console.log("path 2 is " + path2());
window.console.log("path 3 is " + path3());
}
输出为:
path 0 is A/B/C/发布于 2018-10-24 22:59:23
Q1:为什么main()中的makePath函数不起作用?
答:你只声明了main函数,但没有调用它,只需在最后添加main(),它就可以工作了!
Q2:为什么在输出字符串的末尾有一个额外的分隔符?
答:问题出在这里:console.log("path 0 is " + path0());。
你调用了一个额外的path0(),这会使你的数组comp变成'A','B','C',‘’。
你可以像这样修改你的代码:
var path0 = makePath("/");
path0("A");
path0("B");
let finalResult = path0("C");
console.log("path 0 is " + finalResult);在没有额外调用的情况下,结果应该会像您预期的那样工作。
https://stackoverflow.com/questions/52970559
复制相似问题