不太理解这个for循环和变量声明位置对返回值的影响

function findLongestWord(str) {
  var arr = [];
  arr = str.split(" ");
  str = arr[0];
  for(var i = 0; i < arr.length; i++) { 
    if(arr[i].length > str.length) {
      str = arr[i];
    }
  }
  return str.length;
}

findLongestWord("The quick brown fox jumped over the lazy dog");  //6
function findLongestWord(str) {
  var arr = [];
  arr = str.split(" ");
  for(var i = 0; i < arr.length; i++) { 
    str = arr[0];
    if(arr[i].length > str.length) {
      str = arr[i];
    }
  }
  return str.length;
}

findLongestWord("The quick brown fox jumped over the lazy dog");  //3

为什么是3?

阅读 2.6k
6 个回答
function findLongestWord(str) {
    var arr = [];
    arr = str.split(' ');
    for (var i = 0,str = arr[0]; i < arr.length; i++) {
        if (arr[i].length > str.length) {
            str = arr[i];
        }
    }
    return str.length;
}
var result = findLongestWord('The quick brown fox jumped over the lazy dog');
console.log(result);

for的每次循环开始都会执行一遍str = arr[0];,结果自然不对啦~把这个赋值放到var i = 0的后边(都是初始化赋值嘛)就可以了。

arr[i].length > str.length

你可以在for循环中把这个 打印出来 看看是不是 false

因为根本就没有走进去if str 从头到尾都没有发生任何变化

你是要求得数组中的最长字符串吧 首先把a[0]标记为最长的 记录为str 然后开始循环比较str与a[i]的长度 如果str的长度小于a[i]的长度 则给str赋新值 即str = a[i]; 这样循环到最后 得到的str肯定是a中最长的字符串。
可是你要是把str = a[0];放在循环里头,每次都给str重新赋值a[0],这不是做无用功吗,最后求得的肯定是第一个元素和最后一个元素的最大值。

  for(var i = 0; i < arr.length; i++) { 
    str = arr[0];
    if(arr[i].length > str.length) {
      str = arr[i];
    }
  }
  return str.length;

你的 for 循环每次都会赋值 str = arr[0];,此时 str 的 length 就是 3
想要 str 的 length 改变就要进入 if 条件,这要看最后一个 arr 是否能进入 if。
这里你最后一个 arr 是 “dog” 无法进入 if 语句,所以 str 就是保留为 arr[0],即 length 为 3

可能你是要把 str = arr[0]; 写在循环外,要不我真看不出你这段代码有什么意义

你的for循环里面加上str=arr[0],表示每次一次循环,都会将str的自己给重置为arr[0],直到循环到最后一个字符串dog,条件不满足,这个时候str也就还是arr[0].而str.length=3;i++已经不满足条件,跳出循环,return出来的str.lenght也就是3

新手上路,请多包涵

arr = ["The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"];

str = arr[0] ==> str = 'The';

for循环并只把arr[0]赋值给str,所以最后返回的str.length 就是 ‘The’的长度。结果为 3。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题