javascript - JavaScript 闭包函数
问题描述
我是 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/
解决方案
Q1:为什么makePath
main() 中的函数不起作用?
Ans:你只声明了main函数,没有调用它,main()
最后加上就行了!
Q2:为什么在输出字符串的末尾有一个额外的分隔符?
答:问题出在这里:console.log("path 0 is " + path0());
.
你调用了一个额外的path0()
,这使得你的 Arraycomp
变成了 ['A', 'B', 'C', ' ' ]。
您可以像这样修改您的代码:
var path0 = makePath("/");
path0("A");
path0("B");
let finalResult = path0("C");
console.log("path 0 is " + finalResult);
如果没有额外的调用,结果应该会按您的预期工作。
推荐阅读
- c - 如何将C版本设置为C11?
- python - 将 Win API 热键与 Tkinter 集成
- android - PWA - 离线模式是一项义务吗?
- reactjs - 类型 'number' 不可分配给类型 'string | 不明确的'
- apache-nifi - NiFi中的EvaluateJsonPath返回空字符串
- javascript - 带有自定义悬停处理程序的下拉菜单,鼠标移动到子菜单
- azure - 如何在 Azure DevOps 中禁用从 YAML 自动创建环境?
- python - 如何在python中找到对数(非线性)模型的参数?
- flutter - Flutter:使用 SpinningWheel 包的问题路由
- scala - 为什么即使 jar 存在,火花应用程序也会因 java.lang.NoClassDefFoundError: com/sun/jersey/api/client/config/ClientConfig 而失败?