javascript关闭立即评估 [英] javascript closure immediate evaluation

查看:89
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆