javascript: var i 没有定义? (明确规定)

javascript: var i is not defined? (clearly defined)

我想要发生什么

所以我想要的是函数 partA() 每 2 秒单击按钮 [z]。被点击的按钮应该改变,因为脚本是一个循环脚本,例如。第一个循环,它会点击按钮 1,然后是按钮 2,然后是按钮 3,因为 var z = 1 + i++。这可能吗? z 应该等于数字 1 加上循环数。只要变量 i 小于 50,就应该循环。

发生了什么

如果我在 没有 变量 z 的情况下测试脚本,它可以正常工作,循环等等。但是,如果没有变量 z,我必须手动更改等于 z 的数字,这既费力又烦人。

var z = 1 + i++
for(i=0;i<50;i++) {
  setInterval(partA, 2000);
  function partA() {
    buttons = document.getElementsByTagName('button');
    document.getElementsByTagName('button')[z].click();
  }
}

i++应该用另一种方式定义吗? 运行 控制台中的脚本出现的错误是:

Uncaught ReferenceError: i is not defined (...)

at :2:13

at Object.InjectedScript._evaluateOn (:878:140)

at Object.InjectedScript._evaluateAndWrap (:811:34)

at Object.InjectedScript.evaluate (:667:21)

为什么要在循环外定义 z?只需使用 i.

for (var i = 0; i < 50; i++) {
    ...
    document.getElementsByTagName('button')[i].click();
}

在不过多更改您的代码的情况下,我会这样写... 你知道它循环了 50 次,你知道 i 从 0 递增到 49,使用 i 更改按钮名称并且你不需要 z...

for(i=0;i<50;i++) {
设置间隔(A 部分,2000);
函数 partA() {
按钮 = document.getElementsByTagName('button');
document.getElementsByTagName('button')[i + 1].click();
}
}

我可以针对您的代码提出一些建议,所以我会尝试逐一解决。

首先在循环之外定义函数。如果您想知道这背后的原因,请阅读:Don't make functions within a loop

其次,您应该真正将 i 声明为一个变量,以设置它适用的范围。一些关于此的有用信息位于:Declaring variables without var keyword

第三,当你 运行 你的循环时,你可以 运行 IIFE 中的代码。这样做的原因是当你 运行 setInterval 时,它 运行s i 实际上将是 3(或你循环的最后一个数字)。这是由于 setInterval 的异步性质,并且对 i 的引用绑定到函数,而不是 i.

的值

例子

for(var i=0;i<3;i++) {
  (function(i) {
    setInterval(clickButton(i), 2000);
  })(i)
}

function clickButton(idx) {
  return function() {
      buttons = document.getElementsByTagName('button');
      document.getElementsByTagName('button')[idx].click();    
  }
}

JSBin 演示

http://jsbin.com/harigewuze/edit?html,js,output

1) 这就是您希望代码的样子:

var z;

for(i=0;i<50;i++) {
z=i;
setInterval(partA, 2000);
}

function partA() {
buttons = document.getElementsByTagName('button');
document.getElementsByTagName('button')[z].click();
}

2) 不幸的是,在 javascript 中,由于范围的原因,您的这段代码存在问题。我的建议是先阅读此 link http://www.mennovanslooten.nl/blog/post/62 并了解其工作原理。 如果你确实理解了,那就点个赞吧..你刚刚在javascript ;)

提升了自己的水平

3) 如果您仍有问题,post 在 JSFiddle