【问题标题】:javascript function won't loopjavascript函数不会循环
【发布时间】:2014-12-15 18:52:53
【问题描述】:

这是我正在处理的一个 javascript 练习题:

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

console.log(combo("dog"));

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

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

【问题讨论】:

标签: javascript for-loop


【解决方案1】:

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));

【讨论】:

    【解决方案2】:

    使用 return 你将结束函数并从它中取出数据,接下来的事情不会被调用

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

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

    【讨论】:

      【解决方案3】:

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

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

      您似乎想要的行为可以使用generator function (function*) 以某种方式实现。

      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
      

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:
          循环内的

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

          将“return”语句置于循环范围之外 {} 将允许循环继续运行/重复。

          【讨论】:

            猜你喜欢
            • 2015-05-12
            • 2016-02-04
            • 1970-01-01
            • 1970-01-01
            • 2014-11-27
            • 2013-03-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多