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 演示
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
我想要发生什么
所以我想要的是函数 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 演示
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