局部函数在 JavaScript 闭包中有自己的 Outter 变量副本



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" 副本?

问题是你的变量是在 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);

最新更新