首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript闭包函数

JavaScript闭包函数
EN

Stack Overflow用户
提问于 2018-10-24 21:41:26
回答 1查看 81关注 0票数 0

我是JavaScript的新手,目前正在研究闭包。下面您可以看到我的代码,它应该打印任何给定的数组,并在每个元素之间使用指定的分隔符。问题是,如果我尝试创建一个数组并在makePath()函数中打印它,一切都会正常工作。但是当我尝试在main函数中做同样的事情时,它就是不起作用。我还有一个问题,当我尝试连接分隔符和数组时,分隔符被打印在列表的末尾,我不希望这样。

代码语言:javascript
复制
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());
}

输出为:

代码语言:javascript
复制
path 0 is A/B/C/
EN

回答 1

Stack Overflow用户

发布于 2018-10-24 22:59:23

Q1:为什么main()中的makePath函数不起作用?

答:你只声明了main函数,但没有调用它,只需在最后添加main(),它就可以工作了!

Q2:为什么在输出字符串的末尾有一个额外的分隔符?

答:问题出在这里:console.log("path 0 is " + path0());

你调用了一个额外的path0(),这会使你的数组comp变成'A','B','C',‘’。

你可以像这样修改你的代码:

代码语言:javascript
复制
var path0 = makePath("/");
path0("A");
path0("B");
let finalResult = path0("C");
console.log("path 0 is " + finalResult);

在没有额外调用的情况下,结果应该会像您预期的那样工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52970559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档