var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
// and store them in funcs
funcs[i] = function() {
// each should log its value.
console.log("My value: " + i);
};
}
for (var j = 0; j < 3; j++) {
// and now let's run each one to see
funcs[j]();
}Run Code Online (Sandbox Code Playgroud)
它输出这个:
我的价值:3
我的价值:3
我的价值:3
而我希望它输出:
我的价值:0
我的价值:1
我的价值:2
使用事件侦听器导致运行函数的延迟时,会出现同样的问题:
var buttons = document.getElementsByTagName("button");
// let's create 3 …Run Code Online (Sandbox Code Playgroud)我正在尝试使用setTimeout来执行我传递信息的匿名函数,我遇到了麻烦.这个(硬编码版本)可以正常工作:
setTimeout(function(){alert("hello");},1000);
setTimeout(function(){alert("world");},2000);
Run Code Online (Sandbox Code Playgroud)
但是我试图从数组中取出hello和world并将它们传递给函数,而不是(a)使用全局变量,以及(2)使用eval.我知道如何使用全局或eval来做到这一点,但是如何在没有它的情况下做到这一点.这是我想做的(但我知道它不会起作用):
var strings = [ "hello", "world" ];
var delay = 1000;
for(var i=0;i<strings.length;i++) {
setTimeout( function(){alert(strings[i]);}, delay);
delay += 1000;
}
Run Code Online (Sandbox Code Playgroud)
当然,字符串[i]将脱离上下文.如何在没有eval或globals的情况下将字符串[i]传递给该匿名函数?
我正在尝试执行以下操作:
我有一组图像和选择(下拉)HTML元素,每个元素30个.我正在尝试在1到30的循环上使用AddEventListener,这样当我更改select的值时,图像src会更新(并且图像会更改).
AddEventListener函数就是这个:
function AddEventListener(element, eventType, handler, capture)
{
if (element.addEventListener)
element.addEventListener(eventType, handler, capture);
else if (element.attachEvent)
element.attachEvent("on" + eventType, handler);
}
Run Code Online (Sandbox Code Playgroud)
我试过这个并且它有效:
var urlfolderanimalimages = "http://localhost/animalimages/";
var testselect = "sel15";
var testimg = "i15";
AddEventListener(document.getElementById(testselect), "change", function(e) {
document.getElementById(testimg).src = urlfolderanimalimages + document.getElementById(testselect).value;
document.getElementById(testimg).style.display = 'inline';
if (e.preventDefault) e.preventDefault();
else e.returnResult = false;
if (e.stopPropagation) e.stopPropagation();
else e.cancelBubble = true;
}, false);
Run Code Online (Sandbox Code Playgroud)
但后来我尝试在循环中调用它并且它不起作用.该事件已添加,但当我更改任何选择时,它将更新最后一个(ID为i30的图像).
var urlfolderanimalimages = "http://localhost/animalimages/";
for (k=1;k<=30;k++) {
var idselect = "sel" + k;
var idimage = …Run Code Online (Sandbox Code Playgroud)