【问题标题】:Duplication Function implementation复制功能实现
【发布时间】:2018-10-10 00:53:17
【问题描述】:

当我在 typescript 中使用上面的示例时,由于 let 关键字,它在第二个 console.log 中显示了 2 个错误,其中一个带有 i,另一个是在第一行中进行了测试。错误表示 Duplication Function implementation。任何人都可以对此有任何想法...

   function test(){
      for(let i=0; i<5; i++){
         console.log(i);
      }
    console.log("finally:" + i);
    }
    test();

【问题讨论】:

  • 你是如何使用它的,它来自哪里?这是所有的代码吗?
  • 是的,这就是我使用的全部内容。在 typescript 文件中编写并在节点中编译
  • 您的 i 是因为当您执行 finally i 时超出范围。 let 是块级作用域。 Duplication Function implementation. 没有任何意义,除非您在其他地方再次定义了 test
  • 你应该在 for 循环之外声明变量 i ,因为你正在访问它超出它的范围。这是使用 TypeScript 游乐场的工作代码 - https://tinyurl 。 com/yb5fdrgc

标签: javascript typescript


【解决方案1】:

您的代码的唯一问题是:

  console.log("finally:" + i);

就是这样。

我们该如何解决?

    function test(){
      let i = 0;
      for(; i<5; i++){
         console.log(i);
      }
      console.log("finally:" + i);
    }
    test();

为什么会出现问题?

因为let 是块级作用域。

你不应该在你定义它的块之外访问它。

编辑:不要重新初始化 i 的值。

【讨论】:

  • 不需要在for中初始化i,只需要for声明(i; i
  • 是的,你是对的。我跳过了它。我的重点是在功能块中声明i
  • @PrabinPaudel JS 是否要求第一个子句非空?为什么不for (; i &lt; 5; i++)
  • @11684 如果已经定义,我们可以跳过第一个子句。 for (; i &lt; 5; i++) 这将完美运行。
  • 是的,这是可能的。我认为它使代码更具可读性!
猜你喜欢
  • 1970-01-01
  • 2020-03-03
  • 2021-11-24
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 1970-01-01
  • 2012-02-09
  • 2017-02-03
相关资源
最近更新 更多