var中的forloop undefined但我在之前的循环中定义了

时间:2017-06-07 10:33:28

标签: javascript

我在下面有以下函数返回错误

  

未定义

我不知道为什么这是因为我在我的第一个for循环中没有返回undefined。如果我将第二个forloop更改为for(var j = 0 ....那么它可以工作。任何人都在意解释为什么会这样?

;(function (window, document, undefined) {
  'use strict';
  var DOMState = document.readyState;
if (DOMState === 'interactive' || DOMState === 'complete') {
      setTimeout(init, 250);
    } else if (document.addEventListener) {
      document.addEventListener('DOMContentLoaded', init);
    }
  function init() {
    var links = $('#list_of_recs a');

    for (i=0;i<links.length;i++) {
      var href = links[i].href;
      var campaignCode1 = "?intcam=ON_D_homepage_recently_viewed";
      var newHref = href + campaignCode1;
      links[i].href = newHref;
    }

    var recTotalDevices = $('#list_of_recs .one_image');

    for (j=0;j<recTotalDevices.length;j++) {
      var aLinks = $('#list_of_recs a')[j];
      var link = aLinks.href;
      var newLink = link.replace("upg-","");
      var newLinknew = newLink.replace("additional-line","");
      aLinks.href = newLinknew;
    }

  }
})(window, document);

2 个答案:

答案 0 :(得分:2)

JavaScript严格模式阻止使用尚未声明的变量。您尚未声明j,这就是您收到错误的原因。

至于为什么您没有收到i的错误,这很可能是因为您网页中的其他代码声明了全局i变量。

你应该宣布两者。

答案 1 :(得分:0)

如果没有页面上运行的任何其他脚本的完整上下文,则很难确定,但页面上可能还有另一个脚本包含i = 0的全局作用域,因为它是一种常见的约定。

我建议你放一个

var i=0,j=0;

在函数开头确保循环中引用了本地化变量。这比将var放在for()循环顶部

更好