为什么我不能在函数内连续递增变量?

0x4*_*2D2 1 javascript

我试图为每次调用添加10次d.它每次都停留20,为什么?

function d() {
    var c = [10];
    c[0] += 10;
    alert(c[0]); // always 20
}
d(); d(); d(); // supposed to be 20, 30, 40...
Run Code Online (Sandbox Code Playgroud)

Que*_*tin 13

您可以创建一个新数组,并在c每次调用该函数时将其分配给它.这会重置它.

移动赋值使其在函数外部(因此它只运行一次).

var c = [10];
function d() {
    c[0] += 10;
    alert(c[0]);
}
d(); d(); d(); // will be 20, 30, 40...
Run Code Online (Sandbox Code Playgroud)

但是全局变量是错误的良好来源,因此将这些东西包装在闭包中以最小化全局变量的使用被认为是好的风格.

var d =(function () {
    var c = [10];
    function d() {
        c[0] += 10;
        alert(c[0]);
    };
    return d;
})();
d(); d(); d();
Run Code Online (Sandbox Code Playgroud)