繁体   English   中英

JavaScript闭包功能

[英]JavaScript closures function

我刚接触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/

Q1:为什么main()中的makePath函数不起作用?
回答:您只声明了main函数,但没有调用它,只需在最后添加main()

问题2:为什么在输出字符串的末尾还有一个分隔符?
答案:问题出在这里: console.log("path 0 is " + path0());
您调用了另一个path0() ,这使您的Array comp成为['A','B','C','']。

您可以这样修改代码:

var path0 = makePath("/");
path0("A");
path0("B");
let finalResult = path0("C");
console.log("path 0 is " + finalResult);

没有额外的电话,结果应按预期工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM