JavaScript函数不会循环

javascript function won't loop

本文关键字:循环 函数 JavaScript      更新时间:2023-09-26

这是我正在研究的一个JavaScript练习问题:

function combo(str){
  var splitStr=str.split("");
  for (var i=0; i<splitStr.length; i++){
    return splitStr[i];
  }
}
console.log(combo("dog"));

为什么循环不会返回所有三个字母?它打印"d"并停止。如果我将循环从函数中删除,它可以工作。

我做错了什么?请解释一下。

return结束函数的调用,将返回该return之后的任何内容

你的代码结构看起来像你希望它像yield但ES5-不支持这一点,所以你不能使用它(还),你仍然会遇到其他问题(即你只会记录第一个生成的结果)

相反,将您的console.log(绑定到 console )传递到循环中;

function combo(str, callback){
    var splitStr=str.split("");
    for (var i=0; i<splitStr.length; i++){
        callback(splitStr[i]);
    }
}
combo('dog', console.log.bind(console));

使用 return,您将结束函数并从中得出该数据,接下来不会调用

您可以像这样返回一个数组。

function combo(str){
  return splitStr=str.split("");
}
console.log(combo("dog"));

您从 for 循环内部返回,这将停止函数的执行。如果要返回数组的每个字母,只需返回拆分数组本身:

function combo(str) {
  return str.split("");
}

您似乎想要的行为可以通过生成器函数(函数*)以某种方式实现。

function* combo(){
  var splitStr = str.split("");
  for (var i=0; i < splitStr.length; i++){
    yield splitStr[i];
  }
}

然后你会像这样调用它:

var generator = combo("dog");
console.log(generator.next()) //d
console.log(generator.next()) //o
console.log(generator.next()) //g

但请注意,到目前为止,只有少数浏览器支持此功能。

return 停止函数的执行。循环的其余部分没有发生。

循环中的

'return' 结束循环并返回第一个值,因为它只允许循环运行一次。

"return"语句放在循环的范围{}之外将允许循环继续运行/重复。