可以的:
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