<a date="11" href="#">jsonp</a>
<script src="http://cdn.bootcss.com/jquery/2.0.3/jquery.min.js"></script>
<script>
bb();
var data = ['1','2','3','4'];
function bb(data){
$('a[date]').click(function(data){
//for(var i=0;i<data.length;i++){
alert(data[0]);
//}
});
}
为什么弹出undefined ??
因为 jQuery(以及浏览器原生 DOM)的事件处理函数的第一个参数会传递那个事件对象,所以你的匿名函数的参数 data
是那个事件,它没有名为 0
的属性。你应该这样写:
var data = ['1','2','3','4'];
function bb(){
$('a[date]').click(function(){ // ignore arguments
//for(var i=0;i<data.length;i++){
alert(data[0]);
//}
});
}
bb();
这个和闭包一点关系也没有。data
就一全局变量而已。
这才是闭包:
function gen_counter(){
var i = 0;
return function(){
i++;
return i;
};
}
var c = gen_counter();
console.log(c(), c());
console.log(c());
var d = gen_counter();
console.log(c(), d());
<a date="11" href="#">jsonp</a>
<script src="http://cdn.bootcss.com/jquery/2.0.3/jquery.min.js"></script>
<script>
bb();
var data = ['1','2','3','4'];
function bb(data){
$('a[date]').click(function(data){
//for(var i=0;i<data.length;i++){
console.log(data);
alert(data[0]);
//}
});
}
打开console控制台你可以看到 data 其实是 click 的 event 对象 ,并不是你所声明的 data 全局数组,也不是你声明的 bb 函数的形参。 event 对象 没有 下标为 0 的 属性,当然输出的值是 undefined