// 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
我不明白为什么它是推动他们两个在一起,功能尽可能多的信息,可以给超级有帮助,我是一个初学者!
2条答案
按热度按时间mkh04yzy1#
你必须把字母变量的初始化移到函数作用域中,这样每次运行函数时,前面的值都会被擦除。
由于目前为止变量的作用域是全局的,因此每个值都被追加到旧值之后。
另外,请下次尝试将代码格式化得更好一点。我建议使用Prettier或其他一些代码格式化程序。
我用调整后的代码创建了一个jsfiddle,它可以在this link上找到。
wqlqzqxt2#
由于
letters
是函数所在文件上下文中的全局变量,它与函数形成闭包,因此值会一直追加。您可以在此处阅读更多关于闭包的信息https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures为了避免闭包,您应该始终将变量放在函数的词法范围内。