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)我想创建一个传递事件和一些参数的eventHandler.问题是函数没有得到元素.这是一个例子:
doClick = function(func){
var elem = .. // the element where it is all about
elem.onclick = function(e){
func(e, elem);
}
}
doClick(function(e, element){
// do stuff with element and the event
});
Run Code Online (Sandbox Code Playgroud)
'elem'必须在匿名函数之外定义.如何在匿名函数中获取传递的元素?有没有办法做到这一点?
那么addEventListener呢?我似乎无法通过addEventListener传递事件吗?
更新
我好像用'这个'解决了这个问题
doClick = function(func){
var that = this;
this.element.onclick = function(e){
func(e, that);
}
}
Run Code Online (Sandbox Code Playgroud)
这包含我可以在函数中访问的this.element.
addEventListener
但我想知道addEventListener:
function doClick(elem, func){
element.addEventListener('click', func(event, elem), false);
}
Run Code Online (Sandbox Code Playgroud) 我知道JavaScript变量指向一个值:
var foo = true;
//... later
foo = false;
Run Code Online (Sandbox Code Playgroud)
所以在那个例子中我改变了foo指向true- > foo指向false,但如果我这样做:
for (var i=0; i<100; i++){
var someVar = i;
}
Run Code Online (Sandbox Code Playgroud)
我是否为每次迭代创建了一个新的var?
以下两种方法有什么不同吗?
var myvar;
for (var i=0; i<100; i++){
myvar = i;
}
Run Code Online (Sandbox Code Playgroud)
和
for (var i=0; i<100; i++){
var myvar = i;
}
Run Code Online (Sandbox Code Playgroud)
如果是这样,为什么?