js函数调用与声明 (for时注意)

可以的:

test();  // 直接function 方式声明的函数可以直接调用,后声明

function test(){}

aa();   //error  var 方式声明的函数需先声明后调用
var aa = function(){}

$(function () {
    var arr = [];
    var tmp = 0;
    $('.for_loop_event').each(function () {
        arr.push(this);
    });

    for (var i = 0; i < arr.length; i++) {
        arr[i].addEventListener('click',function (e) {
            console.log(i);         // 点击 输出5 5 5 5 5
            //tmp = tmp+ i; console.log(tmp);       // 或者用this.xx access
        });
    } 

    for (var i = 0; i < arr.length; i++) {
        test(i);
    }

    function test(i) {
        console.log('test');
        arr[i].addEventListener('click',function (e) {
            console.log(i); // 点击 1,2,3,4,5
        });
    }  
});

 参考:

因为闭包!

所以也可以这样做

for (var i = 0; i < arr.length; i++) {
    (function (i) {
        arr[i].addEventListener('click',function (e) {
            console.log(i);         // 输出 1 2 3 4 5
        });
    }) (i);                
} 

JavaScript doesn't have block scope (for, if, while etc.)

http://stackoverflow.com/questions/19586137/addeventlistener-using-for-loop-and-passing-values/19586183

 

或者也可以使用 es6的新特性 let:

var a = [];
for( let i = 0;i<10;i++){
  a[i] = function(){
    console.log(i);
  }   
}

a[6]();  // echo  6
//如果for时的i 用var 声明  // 10

 

posted @ 2016-04-07 14:39  wifix  阅读(454)  评论(0编辑  收藏  举报