为什么在第一次迭代后这个函数没有退出?

时间:2017-09-09 11:56:56

标签: javascript function return palindrome

我确实理解以下功能的工作原理。但是为什么它不会在第一次迭代后退出(当有回文时)?它在if语句中检查第一个字符与最后一个字符,这是真的,应该(在我的逻辑中)执行return语句...感谢您解释这个的任何帮助! :)

function palindrome(str) {
  var lowerCaseStr = str.toLowerCase();
  for (var i = 0; i < lowerCaseStr.length; i++)
  debugger;
    if (lowerCaseStr[i] === lowerCaseStr[lowerCaseStr.length - i - 1]){
      return true;
    }
  return false;
}

2 个答案:

答案 0 :(得分:2)

它不会在第一次迭代后但在lowerCaseStr.length次迭代后退出,因为您的代码等同于下面的代码

function palindrome(str) {
  var lowerCaseStr = str.toLowerCase();
  for (var i = 0; i < lowerCaseStr.length; i++){ 
      debugger;
  }

  if (lowerCaseStr[lowerCaseStr.length] === lowerCaseStr[-1]){
      return true;
  }

  return false;
}

也就是说,它迭代lowerCaseStr.length;次,但它为每个迭代做的唯一事情就是调用debugger之后它会测试数组中不存在的元素。 (两个指数都超出界限)。这导致两次undefined undefined === undefined的比较,这总是正确的。

作为副节点,如果根据布尔表达式返回true或false,则考虑使用一个return语句:

return (lowerCaseStr[i] === lowerCaseStr[lowerCaseStr.length - i - 1]);

答案 1 :(得分:0)

您需要切换逻辑,检查不等式并返回false。如果到达目的地,请返回true

function palindrome(str) {
    var lowerCaseStr = str.toLowerCase();
    for (var i = 0; i < lowerCaseStr.length; i++) {
        debugger;
        if (lowerCaseStr[i] !== lowerCaseStr[lowerCaseStr.length - i - 1]) {
            return false;
        }
    }
    return true;
}