【发布时间】:2018-10-24 13:41:26
【问题描述】:
我是 JavaScript 新手,目前正在研究闭包。 您可以在下面看到我的代码,该代码应该打印任何给定数组,每个元素之间都有指定的分隔符。问题是,如果我尝试创建一个数组并在 makePath() 函数中打印它,一切正常。但是当我尝试在主函数中做同样的事情时,它就不起作用了。当我尝试将分隔符与数组连接时,我还有一个问题,分隔符打印在列表的末尾,我不希望这样。
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/
【问题讨论】:
-
好吧,你叫 main 吗?你真的错过了结束
}吗? -
投票以拼写错误/不可复制/未来对其他人无用。 @ Anna - 你只是没有打电话
main。在末尾添加main();调用它并查看它的输出。 -
"分隔符打印在列表的末尾,我不希望这样。"那是因为您通过不带参数调用
path0()将undefined推送到数组。您需要存储最后返回的值:var res = path0("C"); console.log("path 0 is", res);
标签: javascript function closures