(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 之类的..