【问题标题】:JavaScript closures functionJavaScript 闭包函数
【发布时间】: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


【解决方案1】:

Q1:为什么 main() 中的 makePath 函数不起作用?
Ans:你只声明了main函数,没有调用,最后加上main()就行了!

Q2:为什么在输出字符串的末尾有一个额外的分隔符?
Ans:问题出在这里: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);

没有额外的调用,结果应该如你所愿。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 2017-01-11
    • 2015-12-03
    • 2013-07-10
    • 2011-05-27
    • 2010-09-19
    相关资源
    最近更新 更多