首页 > 如下的监听函数怎么传参

如下的监听函数怎么传参

(color_array[i])是函数外的值(会更新)。如下的监听触发,不会改变(color_array[i]),

 var canvas = document.getElementById("mycanvas");
var ctx = canvas.getContext("2d");
//console.log(ctx);

canvas.width = canvas.height = 200;

ctx.beginPath();

var score = 0, time = 60, flag =0; //定义初始值 ,时间
var color_array = ["red", "white", "black", "blue", "green", "DarkSlateGray3", "DarkSlateGray", "DarkOliveGreen4"];
ctx.moveTo(0, 0);
ctx.lineTo(100, 0);
ctx.lineTo(50, 50);

var gameState = setInterval(changeColor, 1000);

function changeColor() {
    if (!time) {
        clearInterval(gameState);
    }

    var domTime = document.querySelector(".time"), domScore = document.querySelector(".score");
    domTime.innerHTML = time; //插入时间

    var i = time % 8 ; //根据time值顺序遍历数组

    //触摸监听
    canvas.addEventListener("touchstart",
            function () {

                if ( color_array[i]=== 'white') {
                    console.log(i);
                    flag = 1; //设置状态,注意这里有多次触发 
                }
            }

            , false);

    if (flag == 1) {
        score++;
        domScore.innerHTML = score;
        flag = 0; //清楚状态 ,重新累加积分
    }

    ctx.fillStyle = color_array[i];  //change color
    ctx.fill();
    i++;
    time--;
}

函数为什么console.log(i) 一直没不变。。我想过传外面的参,不过怎么想都不知道


上面的代码,我找出问题了,可是不知道 怎么解释,我把i的声明放到最外面 问题解决。。。,但我不知道为什么会这样

补充:

这会不会就是传说中的闭包?
因为本人刚从后端走到前端,很东西都是刚开始学的。。


http://jsfiddle.net/mpLb7mrz/ 直接保存在变量里面是没有问题的啊,或者你也可以存到外部再读取,比如 DOM Attribute 或者 localStorage 之类的..

【热门文章】
【热门文章】