我将要发布它,因为找不到解决该问题的答案。
我有以下代码,其中我更改了某些div的背景色。 我有一个针对该changeSqColor()的函数,该函数在另一个函数中调用时不起作用。 这里有什么问题? (定义了数组颜色,元素数= div数)
var squares = document.getElementsByClassName("square");
function changeSqColor() {
for (var i = 0; i < squares.length; i++) {
squares[i].style.background = colors[i];
}
}
changeSqColor(); // this works ok colors are changes
function resetGame() {
//other commands
changeSqColor(); //this one doesnt work, in console it says 'undefined'
}
答案 0 :(得分:2)
您有时必须在代码中调用function resetGame
。您尚未调用resetGame
。
var squares = document.getElementsByClassName("square");
let colors = ['red','green','blue','white','yellowgreen'];
function changeSqColor() {
for (var i = 0; i < squares.length; i++) {
squares[i].style.background = colors[i];
}
setTimeout(function(){resetGame();},3000);// call resetGame Function.
}
changeSqColor();
function resetGame (){
for (var i = 0; i < squares.length; i++) {
squares[i].style.background = colors[0];
}
setTimeout(function(){changeSqColor();},3000);
// As you mentioned calling changeSqColor()
}
<div class="square">1</div>
<div class="square">2</div>
<div class="square">3</div>
<div class="square">4</div>
<div class="square">5</div>
答案 1 :(得分:0)
changeSqColor(); -之所以有效,是因为您通过()括号显式执行了方法调用。
resetGame()您只是通过不执行方法来定义方法。如果您想定义函数resetGame()并一次性执行它,我们可以这样做,
(function resetGame() {
//other commands
changeSqColor(); //this one doesnt work, in console it says 'undefined'
})()
如果您正在调用resetGame()方法,那么在执行resetGame()时,如果函数changeSqColor()不在范围内/不可访问,则将出现“未定义”。
答案 2 :(得分:0)
好的,我知道是什么问题。 我宣布局部变量为颜色的新地方。
之前
function resetGame (){
var colors = generateRandomColors(6);
pickedColor = pickColor();
colorDisplay.textContent = pickedColor;
messageDisplay.textContent = "";
changeSqColor();
}
之后:
function resetGame (){
colors = generateRandomColors(6); // var removed
pickedColor = pickColor();
colorDisplay.textContent = pickedColor;
messageDisplay.textContent = "";
changeSqColor();
}
愚蠢的错误;-)