本地函数在javascript闭包中有自己的outter变量副本吗?

时间:2018-01-04 08:12:24

标签: javascript closures

html和javascript如下:

<script>
    function a(k)
    {
        var i=0;

        if(k==0)
        {
            function b()
            {
                alert(++i);
            }
            return b;
        }
        else
        {
            function c()
            {
                alert(++i);
            }
            return c;
        }
    }

    var d=a(0);

    var e=a(1);

</script>

    <button onclick="d()">clickme</button>
    <button onclick="e()">clickme2</button>

html和javascript在上面。

我先点击“clickeme”按钮,浏览器提醒“1”;然后我点击“clickme2”按钮,浏览器警报“1”。

为什么呢?

点击“clickme”按钮后,变量“i”变为1;然后,当我点击“clickme2”按钮时,浏览器应警告“2”。 为什么呢?

b()和c()的局部函数是否拥有变量“i”的副本?

1 个答案:

答案 0 :(得分:0)

问题是你的变量是在a()函数中定义和初始化的。

代码应更改为:

<script>
var i=0;

function a(k)
{


    if(k==0)
    {
        function b()
        {
            alert(++i);
        }
        return b;
    }
    else
    {
        function c()
        {
            alert(++i);
        }
        return c;
    }
}

var d=a(0);

var e=a(1);