javascript关闭立即评估 [英] javascript closure immediate evaluation
本文介绍了javascript关闭立即评估的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
请考虑以下Javascript代码:
var a = [];
var f = function(){
for(var i = 0; i <3; i ++){
a.push alert(i)});
}
for(var j = 0; j <3; j ++){
a [j]();
}
};
警报三次打印输出3。我想要一个不同的行为 - 在循环的每次迭代生成打印i的当前值的函数。也就是说
解决方案
任何想法都可以打印不同的索引。
<创建一个匿名函数,它接受
i
作为参数并返回某个函数: for(var i = 0; i <3; i ++){
a.push((function(i){
return function(){
alert
}
})(i));
}
for(var j = 0; j< 3; j ++){
a [j]
}
或做类似的操作:创建一个匿名函数接受 i
作为将函数添加到数组的参数:
for(var i = 0 ; i <3; i ++){
(function(i){
a.push(function(){
alert(i);
});
})(i);
}
for(var j = 0; j< 3; j ++){
a [j]
}
Consider the following Javascript code:
var a = [];
var f = function() {
for (var i = 0; i < 3; i++) {
a.push(function(){alert(i)});
}
for (var j = 0; j < 3; j++) {
a[j]();
}
};
The alerts print out '3' all three times. I want a different behaviour - in each iteration of the loop generate a function that prints the current value of i. I.e. 3 functions that print different indices.
Any ideas?
解决方案
Create an anonymous function which accepts i
as a parameter and returns that certain function:
for (var i = 0; i < 3; i++) {
a.push((function(i) {
return function() {
alert(i);
}
})(i));
}
for (var j = 0; j < 3; j++) {
a[j]();
}
Or do something similar: create an anonymous function which accepts i
as a parameter to add the function to the array:
for (var i = 0; i < 3; i++) {
(function(i) {
a.push(function() {
alert(i);
});
})(i);
}
for (var j = 0; j < 3; j++) {
a[j]();
}
这篇关于javascript关闭立即评估的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文