【问题标题】:Function with a for loop and if else statement- letters after带有 for 循环的函数和 if else 语句后的字母
【发布时间】:2022-11-19 21:17:12
【问题描述】:
// YOUR CODE
let letters = '';

function lettersAfter(haystack, needle, limit){
    ('any value','a', 2);
    for(let i = 0; i < haystack.length; i++){
        console.log(i);
        if(haystack[i] === needle){
            for(let j = 0; j < limit; j++) {
                console.log(j);
             let innerChar = haystack[i + j + 1];
            console.log(innerChar);
         letters += innerChar;
         console.log(letters);

         }  
return letters;
        }
    }
}

// DO NOT EDIT BELOW

module.exports = lettersAfter;

我正在做测试(不是我写的),我应该得到下面列出的值:

lettersAfter('任意值','a', 2); // ==> 纽约 lettersAfter('不知疲倦', 'a', 4); // => 蒂加

我收到 ==>nytiga

我不明白为什么要把它们两个放在一起,功能尽可能多的信息可以提供非常有帮助,我是初学者!

【问题讨论】:

  • 您的 letters 变量在函数外部重复使用

标签: javascript function loops for-loop if-statement


【解决方案1】:

您必须将字母变量初始化移动到函数范围内。这样,每次运行该函数时,先前的值都会被删除。
由于到目前为止该变量是全局范围的,因此每个值都会附加到旧值。

另外,下次请尝试更好地格式化您的代码。我建议使用 Prettier 或其他代码格式化程序。

我用调整后的代码创建了一个 jsfiddle,它可以在 this link 上找到。

function lettersAfter(haystack, needle, limit) {
  let letters = '';
  for (let i = 0; i < haystack.length; i++) {
    if (haystack[i] === needle) {
      for (let j = 0; j < limit; j++) {
        let innerChar = haystack[i + j + 1];
        letters += innerChar;
      }
      return letters;
    }
  }
}

console.log(lettersAfter('any value', 'a', 2));
console.log(lettersAfter('indefatigable', 'a', 4))

【讨论】:

    【解决方案2】:

    由于 letters 是函数所在文件的上下文中的全局变量,它与函数形成一个闭包,因此值不断附加。您可以在此处阅读有关闭包的更多信息https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures

    为避免闭包,您应该始终将变量放在函数的词法范围内。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多