Javascript如何返回工作

时间:2017-04-19 12:28:04

标签: javascript

我实际上想要更新我之前的问题Javascript understanding return,因为下面的代码与之前的代码非常相似,但由于该问题已经回答,我决定发布此问题。我以前的问题的代码已经很好了,但我想满足我的一些好奇心所以我试验了代码并移动了返回的namePosition,

function positionIdentifier(name, nameArray) {
  var namePosition;
  for (i = 0; i < nameArray.length; i++) {
    if (nameArray[i] == name) {
      namePosition = function() {
        alert("Your name is in position number " + (i + 1));
      }

    }

  }
return namePosition;

}

name1Array = ["look", "sky", "walk", "kier"];
positionIdentifier("walk", name1Array)(); 

为什么警告错误的位置(i + 1)?相反,它会警告最终位置,即阵列的长度。

2 个答案:

答案 0 :(得分:0)

我的朋友在javascript中被称为闭包。

function() {
  alert("Your name is in position number " + (i + 1));
}

当调用 positionIdentifier 函数时, i 具有 中的最后一个值 循环。

要解决此问题,您需要执行此操作

function positionIdentifier(name, nameArray) {
  var namePosition;
  for (i = 0; i < nameArray.length; i++) {
    if (nameArray[i] == name) {

      /*  now this will keep the correct value of i */
      namePosition = (function(i) {
          return function(){
              alert("Your name is in position number " + (i + 1));
          }
      })(i)
      /*  now this will keep the correct value of i */

    }
  }
  return namePosition;
}

这是一个工作小提琴https://jsfiddle.net/uxyot51b/

答案 1 :(得分:0)

你忘了在这里使用break语句是正确的代码:

<script>
        function positionIdentifier(name, nameArray) {
            var namePosition;
            for (i = 0; i < nameArray.length; i++) {
                if (nameArray[i] == name) {
                    namePosition = function () {
                        alert("Your name is in position number " + (i + 1));
                    };
                    break;
                }

            }
            return namePosition;

        }

        name1Array = ["look", "sky", "walk", "kier"];
        positionIdentifier("walk", name1Array)();
    </script>