Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的变量出现问题_Javascript - Fatal编程技术网

javascript中的变量出现问题

javascript中的变量出现问题,javascript,Javascript,我被困在这个节拍器小项目上了。它应该在两种背景色之间来回闪烁。只要定义了这两种颜色,它就可以正常工作(将JS第12行中的“col”切换为任意颜色即可)。不过,我也在尝试这样做,这样我就可以随机选择onclick中的一种颜色。我可以告诉(console.log)我的数字随机化器正在为我的变量“col”生成一个正确的十六进制颜色值,但我无法让该变量工作。我试过不加引号的“col” 以下是代码笔的链接: flashnome 无声节拍器 更慢的 更快 变色 @导入url(https://fon

我被困在这个节拍器小项目上了。它应该在两种背景色之间来回闪烁。只要定义了这两种颜色,它就可以正常工作(将JS第12行中的“col”切换为任意颜色即可)。不过,我也在尝试这样做,这样我就可以随机选择onclick中的一种颜色。我可以告诉(console.log)我的数字随机化器正在为我的变量“col”生成一个正确的十六进制颜色值,但我无法让该变量工作。我试过不加引号的“col”

以下是代码笔的链接:


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;
  }
}