增加setInterval而不使用全局变量

时间:2011-12-09 15:12:49

标签: javascript closures

numba = 1;

function A() {
    numba++;
    console.log(numba);
}

$(function() {
    var numnum2 = 0;
    setInterval('A()',1000);
    //setInterval(B.apply($(this)), 1000);
});


function B() {
    $(this).numnum2++;
    console.log($(this).numnum2);
}

Fiddle

如何让B()作为A()减去全局变量?

3 个答案:

答案 0 :(得分:3)

$(function() {
    var numnum2 = 0;

    function B() {
        numnum2++;
        console.log(numnum2);
    }

    setInterval(A,1000);
    setInterval(B,1000);
});

function B() {
    if(typeof B.numnum2 === 'undefined') B.numnum2 = 0;
    B.numnum2++;
    console.log(B.numnum2);
}

$(function() {
    B.numnum2 = 0;
    setInterval(A, 1000);
    setInterval(B, 1000);
});

答案 1 :(得分:1)

你做不到。 JavaScript只传递值。

您可以使用该属性传递对象。

    function A(a) {
        a.numbna++;
        console.log('from A: ' + a.numbna);
    }
    
    $(function() {
        var a = { numbna : 0 };
        setInterval(function() { A(a) },1000);
        setInterval(function() { B(a) },1000);
        //setInterval(B.apply($(this)), 1000);
    });
    
    
    function B(a) {
        a.numbna++;
        console.log('from B: ' + a.numbna);
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>

答案 2 :(得分:1)

不确定你到底在找什么,但这是吗?

function newA() {
    var numba = 0;

    setInterval(function() {
        numba++;
        console.log(numba);
    }, 1000);
}