javascript中的变量出现问题
我被困在这个节拍器小项目上了。它应该在两种背景色之间来回闪烁。只要定义了这两种颜色,它就可以正常工作(将JS第12行中的“col”切换为任意颜色即可)。不过,我也在尝试这样做,这样我就可以随机选择onclick中的一种颜色。我可以告诉(console.log)我的数字随机化器正在为我的变量“col”生成一个正确的十六进制颜色值,但我无法让该变量工作。我试过不加引号的“col” 以下是代码笔的链接:javascript中的变量出现问题,javascript,Javascript,我被困在这个节拍器小项目上了。它应该在两种背景色之间来回闪烁。只要定义了这两种颜色,它就可以正常工作(将JS第12行中的“col”切换为任意颜色即可)。不过,我也在尝试这样做,这样我就可以随机选择onclick中的一种颜色。我可以告诉(console.log)我的数字随机化器正在为我的变量“col”生成一个正确的十六进制颜色值,但我无法让该变量工作。我试过不加引号的“col” 以下是代码笔的链接: flashnome 无声节拍器 更慢的 更快 变色 @导入url(https://fon
flashnome
无声节拍器
更慢的
更快
变色
@导入url(https://fonts.googleapis.com/css?family=Josefin+Sans:400700);
html,正文{
身高:100%;
宽度:100%;
}
#头衔{
文本对齐:居中;
颜色:白色;
字号:5em;
字体系列:“Josefin Sans”,无衬线;
保证金:自动;
文本转换:大写;
填充物:2米0.2米;
}
#描述{
文本对齐:居中;
颜色:白色;
字号:2em;
字体系列:“Josefin Sans”,无衬线;
保证金:自动;
文本转换:大写;
填充:0;
}
#按钮1{
文本对齐:居中;
字体大小:.7em;
字体系列:“Josefin Sans”,无衬线;
保证金:0自动;
文本转换:大写;
填充:8px;
}
var x=500;
var-flashStep=1;
var-myInterval;
函数更改(){
var col='#'+(Math.random().toString(16)+'000000').slice(2,8);
控制台日志(col);
}
函数flash(){
如果(flashStep==1){
document.bgColor=“col”;
flashStep=2;
}否则{
document.bgColor=“#333”;
flashStep=1;
}
}
功能更快(){
window.clearInterval(myInterval);
myInterval=window.setInterval(闪烁,x-=25);
}
函数(){
window.clearInterval(myInterval);
myInterval=window.setInterval(闪光,x+=25);
}
myInterval=window.setInterval(闪光,x);
函数更改(){
var col='#'+(Math.random().toString(16)+'000000').slice(2,8);
控制台日志(col);
}
创建一个名为“randomColor”的全局变量并对其进行更改
var x = 500;
var flashStep = 1;
var myInterval;
var randomColor = "#FFFF00";
function change() {
var col = '#' + (Math.random().toString(16) + '000000').slice(2, 8);
randomColor = col;
console.log(col);
}
function flash() {
if (flashStep == 1) {
document.bgColor = randomColor;
flashStep = 2;
} else {
document.bgColor = "#333";
flashStep = 1;
}
}
function faster() {
window.clearInterval(myInterval);
myInterval = window.setInterval(flash, x -= 25);
}
function slower() {
window.clearInterval(myInterval);
myInterval = window.setInterval(flash, x += 25);
}
myInterval = window.setInterval(flash, x);
首先,您已经编写了两次change()函数。然后,在它的内部使用var关键字-这使得变量在change()函数中是局部的-该函数的外部没有任何东西可以访问col 只需在change()函数上方将col定义为全局函数。当引用它时,不要将它括在引号中,这使它成为一个字符串(文本值“col”) 因此: 通过在“change()”函数中使用“return”,然后在flash()函数中调用change()int,可以避免使用全局变量。
这比使用全局变量有点“更好的练习”谢谢你的帮助!!!在发布问题时,double change()函数只是一个复制/粘贴问题。我认为这是一个范围问题,但我试图解决它没有帮助。真的很感激!谢谢你的帮助!!无法理解如何更改全局变量col。JS的一些基础知识仍然无法理解。非常感谢你的帮助!!不客气。如果它解决了你的问题,请接受它作为答案。如果有任何问题,请告诉我。谢谢!我试图找到一种使用返回列的方法,但没有像您那样尝试设置bgColor=change()。要学的东西很多,但我发现通过一起攻克项目和克服错误,我能更好地吸收这些东西,所以非常感谢您的帮助。
var x = 500;
var flashStep = 1;
var myInterval;
var randomColor = "#FFFF00";
function change() {
var col = '#' + (Math.random().toString(16) + '000000').slice(2, 8);
randomColor = col;
console.log(col);
}
function flash() {
if (flashStep == 1) {
document.bgColor = randomColor;
flashStep = 2;
} else {
document.bgColor = "#333";
flashStep = 1;
}
}
function faster() {
window.clearInterval(myInterval);
myInterval = window.setInterval(flash, x -= 25);
}
function slower() {
window.clearInterval(myInterval);
myInterval = window.setInterval(flash, x += 25);
}
myInterval = window.setInterval(flash, x);
var col = false;
function change(){
col = '#F11';
}
change();
document.bgColor = col;
function change() {
var col = '#' + (Math.random().toString(16) + '000000').slice(2, 8);
console.log(col);
return col;
}
function flash() {
if (flashStep == 1) {
document.bgColor = change();
flashStep = 2;
} else {
document.bgColor = "#333";
flashStep = 1;
}
}