javascript - jquery 局部和全局变量的问题?
PHPz
PHPz 2017-04-11 10:37:47
[JavaScript讨论组]

函数中的定义的变量是因为每次执行之后销毁的缘故,所以每次if判断时都是undefined吗?



var b;
$("button").click(function(event) {
        var a;
        if(a === undefined ){
            a = 1;
            alert(a)
        }
        if(b === undefined ){
            b = 2;
            alert(b)
        }
    });
PHPz
PHPz

学习是最好的投资!

全部回复(4)
伊谢尔伦

你真正要理解的是JS的作用域。
b 在全局作用域 global
点击发生后进入了另外一个作用域 local
在local作用域中每次都声明a 结果就是 a 每次都被赋值为 undefined ,
因为每次脱离这个作用域时,作用域里面的变量都被垃圾处理机制回收销毁,所以在每次点击后 a 又被重新声明并重新赋值为 undefined。

更进一步,JS这些作用域都是嵌套的,正因为有作用域链,才有了后面的闭包,不过那就是另一个话题啦。

var b; // global
$("button").click(function(event) {
    var a; // local
    // a undefined
    // b undefined    
});
迷茫

执行后 b 不会 undefined,但 a 会。

另外,如果你有很多个 button,会共享一个 b,如果想分别保存数据,建议用 data()

$("button").click(function(event) {
    var a = $(this).data("a");
    if (a === undefined) {
        a = 1;
        $(this).data("a", a);
        alert(a);
    }
});
阿神

b是全局的变量,不会是undefineda会。

阿神

如你的代码所写,关于变量a,每次进入callback,都重新定义一次,而且定义的方式就是var a;,这个做法的结果和var a = undefined;是一回事,你说为什么每次判断都是undefined?^^

至于变量b,她不会永远是undefined,第一次点击之后,b就被赋值了,而由于b是在click事件的callback之外定义的,所以不受click影响,下次再点击时,b就是2

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

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