JavaScript中一个函数怎么获得另一个函数中变量

代码如下

$(function(){
    $('.a').on('click',function(){
        var counter=0
        counter++
    })
    
    $('.b').on('click',function(){
        if(counter>=3){
            alert(大于3)
        }
    })
})

有2个按钮,a和b,点击a,变量counter会增加1。当b按钮点击的时候,如果变量counter大于等于3时,会弹出提示框。
因为counter不是全局变量,每次点击之后会被销毁,所以每次counter都是1,如果用闭包,该怎么实现。再不使用全局变量的情况下,b按钮点击的函数中又应该怎么获得a按钮函数中的counter值。

阅读 3.6k
2 个回答

一定要在上层作用域声明的,比如这样

$(function(){

    (function() {
        var counter = 0;
        
        $('.a').on('click',function() {
            counter++;
        });
        
        $('.b').on('click',function() {
            if(counter > 3) {
                alert('大于3');
            }
        });
    })();
})

因为你用匿名函数包装了一层,所以在这个匿名函数内定义的局部变量,在子级函数中是有效的,即你应该:

$(function(){
    var counter=0;
    $('.a').on('click',function(){
        counter++;
    })
    
    $('.b').on('click',function(){
        if(counter>=3){
            alert(大于3);
        }
    })
})

你原来对a的监听函数逻辑会导致counter永远是1,因为每次进入你都是初始化为0,然后加1的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题