尽管初始化并传递给函数,变量仍未定义

时间:2015-06-30 14:18:35

标签: javascript function variables

不确定我哪里出错了。

我有以下代码可以创建一个" bubble"每隔1-2秒在页面上,然后在6秒后摧毁每个气泡。

代码通常可以正常工作,但变量bubbleID除了初始化之外显示为undefined

function startBubbleMachine(){
        var bubbleID = 1;
        setInterval(function makeBubble(bubbleID){
            var wh = randomInt(143, 50);
            console.log('making bubble number '+bubbleID); // this shows undefined
            $('.wrapper').append('<div class="db-bubble db-bubble-'+bubbleID+'" style="transform:rotate('+randomInt(20, 1)+'deg);left:'+randomInt(100, 1)+'%;width:'+wh+'px;height:'+wh+'px;"></div>');
            killBubble(bubbleID);
            bubbleID++; // this doesn't seem to get used
        }, randomInt(2000, 1000));
    }

我将bubbleID初始化为1:

var bubbleID = 1;

然后我在bubbleID

内的函数中传递setInterval
setInterval(function makeBubble(bubbleID){
    ...
});

然后我在该功能中递增它:

bubbleID++;

我哪里错了?

1 个答案:

答案 0 :(得分:8)

您通过在匿名函数中包含类似名称的参数来隐藏var bubbleID变量。摆脱形式参数。

setInterval(function makeBubble( ){
//                              ^

包含该参数名称不会传递变量;它只是说该函数需要传递一个参数。但是,没有必要,因为该计时器功能中的代码可以&#34;参见&#34; bubbleID变量通过闭包。