javascript - js闭包为什么弹出undefined ?
伊谢尔伦
伊谢尔伦 2017-04-10 13:12:52
[JavaScript讨论组]
<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 ??

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(2)
阿神

因为 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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号