【发布时间】:2021-04-04 22:57:51
【问题描述】:
我有一些 javascript 代码可以将网页中的文本元素更改为随机颜色。我是新手,但代码确实有效。每三秒,特定元素的文本颜色就会变为一种新的随机颜色。
const handler = function() {
const genselector = "div.tw-c-text-alt-2.tw-flex > span";
const genel = document.querySelector(genselector);
var randcolor = Math.floor(Math.random()*16777215).toString(16);
genel.style.color = "#" + randcolor;
}
setInterval(handler, 3000);
如果我将两个 const 变量都移到函数之外,程序将不再工作,这是有道理的,因为变量是在函数外部定义的,它们不是全局变量。
const genselector = "div.tw-c-text-alt-2.tw-flex > span";
const genel = document.querySelector(genselector);
const handler = function() {
const specel = document.querySelector(specselector);
var randcolor = Math.floor(Math.random()*16777215).toString(16);
genel.style.color = "#" + randcolor;
}
setInterval(handler, 3000);
但是,如果我只将第一个变量移到函数之外,代码仍然可以工作,尽管我认为它不应该这样做。
const genselector = "div.tw-c-text-alt-2.tw-flex > span";
const handler = function() {
const genel = document.querySelector(genselector);
var randcolor = Math.floor(Math.random()*16777215).toString(16);
genel.style.color = "#" + randcolor;
}
setInterval(handler, 3000);
当 genselector 变量在函数外部定义时,该函数如何访问它,以及由于什么原因导致它工作,为什么当我移出genel 变量时不会发生同样的事情。
【问题讨论】:
-
很可能该元素在您查询它时不存在。变量范围不是问题。
-
一般有
block scope和scope的google。最后在 js 中搜索 Googlefunction hoisting以获得一般答案。我认为这里的问题是您运行 js 的时间 -
见What is the scope of variables in JavaScript?。在函数外部定义的变量在函数内部仍然可以访问;这不是您的脚本停止工作的原因。使用browser console (dev tools)(点击
F12)并阅读任何错误。是document.querySelector(genselector) === null?你的<script>above 是没有defer属性且没有DOMContentLoaded或load监听器的HTML 吗?见Why does jQuery or a DOM method such asgetElementByIdnot find the element?。 -
同样在你的情况下不起作用,如果你没有在任何地方定义规范选择器,那么该行也会阻止代码运行。
标签: javascript scope constants