解决方案 »

  1.   

    楼主,可以按以下方式试试:<script>
                var add = {};
                (function (add) {
                    var counter = 0;
                    add.getCount = function(){
                        return counter += 1;
                    }
                })(add);
                function myFunction(){
                    document.getElementById("demo").innerHTML = add.getCount();
                }
            </script>
      

  2.   

    var add = (function () {
        var counter = 0;
        return counter += 1;
    })();
    改为
    var add = function () {
        var counter = 0;
        return counter += 1;
    }
      

  3.   

    var counter = 0;
    var add = function () {
        return counter += 1;
    }
      

  4.   


    谢谢,是工作的,但是有点看不懂,能说下为什么要给这个闭包一个参数add吗? 如果可以的话,能说下我原来的代码为什么是错的吗?
      

  5.   


    谢谢,是工作的,但是有点看不懂,能说下为什么要给这个闭包一个参数add吗? 如果可以的话,能说下我原来的代码为什么是错的吗?
    add是一个空对象,初始化了一个匿名函数,将add作为空对象作为参数传入匿名函数中,然后在匿名函数中定义一个闭包来修改匿名函数中的变量,这样就可以达到效果了。你的错误是匿名函数的赋值错误,基本上不会向你那样赋值的,其次是不用闭包的话counter不应该定义在函数体内,定义在函数体内就是局部变量每次点击都是0开始,当然不能增加了,起始你也可以改成如下形式:            var counter = 0;
                var add = (function () {
                    return counter += 1;
                });
                function myFunction(){
                    document.getElementById("demo").innerHTML = add();
                }
      

  6.   


    是这个吗?
    <button type="button" onclick="myFunction()">Count!</button>
      

  7.   


    谢谢,是工作的,但是有点看不懂,能说下为什么要给这个闭包一个参数add吗? 如果可以的话,能说下我原来的代码为什么是错的吗?
    add是一个空对象,初始化了一个匿名函数,将add作为空对象作为参数传入匿名函数中,然后在匿名函数中定义一个闭包来修改匿名函数中的变量,这样就可以达到效果了。你的错误是匿名函数的赋值错误,基本上不会向你那样赋值的,其次是不用闭包的话counter不应该定义在函数体内,定义在函数体内就是局部变量每次点击都是0开始,当然不能增加了,起始你也可以改成如下形式:            var counter = 0;
                var add = (function () {
                    return counter += 1;
                });
                function myFunction(){
                    document.getElementById("demo").innerHTML = add();
                }
    你说的第二种方法,会把counter作为global 变量暴露出来啊