javascript 带有for循环和if else语句的函数-后面的字母

w8f9ii69  于 2022-11-20  发布在  Java
关注(0)|答案(2)|浏览(127)
// 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);//==〉ny lettersAfter(“不知疲倦的”,“a”,4);// =〉老虎
我收到==〉nytiga
我不明白为什么它是推动他们两个在一起,功能尽可能多的信息,可以给超级有帮助,我是一个初学者!

mkh04yzy

mkh04yzy1#

你必须把字母变量的初始化移到函数作用域中,这样每次运行函数时,前面的值都会被擦除。
由于目前为止变量的作用域是全局的,因此每个值都被追加到旧值之后。
另外,请下次尝试将代码格式化得更好一点。我建议使用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))
wqlqzqxt

wqlqzqxt2#

由于letters是函数所在文件上下文中的全局变量,它与函数形成闭包,因此值会一直追加。您可以在此处阅读更多关于闭包的信息https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures
为了避免闭包,您应该始终将变量放在函数的词法范围内。

相关问题