javascript - 在一定时间后进行变量更改 HTML 5/JavaScript
问题描述
我对网络开发很陌生,所以如果我听起来很愚蠢,我很抱歉。我试图在一段时间后使用 HTML 5/JavaScript 进行变量更改。这是我使用的代码
var myVar = setInterval(OnScreenVariables, 100);
var myVar = setInterval(Interval, 1000);
function Interval() {
if (x == 1) {
i++;
if (i > 3) {
var i = 1;
var x = 0;
}
}
}
function OnScreenVariables() {
document.getElementById("i").innerHTML = i;
document.getElementById("x").innerHTML = x;
}
<p id="x">hi</p>
<p id="i">hi</p>
<div style="backgound-color:blue;" onclick="x=1;">press me</div>
但它不起作用。你能告诉我为什么它不起作用以及是否有更好的方法来做到这一点。
解决方案
几个问题。
https://www.w3schools.com/js/js_hoisting.asp
https://developer.mozilla.org/en-US/docs/Glossary/Hoisting
var i 和 var x 正在被提升,所以:
function Interval() {
if (x == 1) {
i++;
if (i > 3) {
var i = 1;
var x = 0;
}
}
}
表现得像
function Interval() {
var i;
var x; // x is always undefined
if (x == 1) {
i++; // undefined++ = NaN
if (i > 3) {
i = 1;
x = 0;
}
}
}
修复该问题后,在脚本运行时不会声明 i 和 x,因此它们会使用 idi
和x
. DOMElement++ = NaN,并且 DOMElement.toString() 等于表示 DOM 元素内部名称的字符串。
我建议使用 let 和 const(它们具有更好的作用域和更少的意外行为机会,例如可以在循环闭包内部限定作用域)而不是 var,并养成确保使用 var、let、const 和计划在使用它们的任何地方故意保持变量的范围和声明。
<!DOCTYPE html>
<html>
<head>
<style>
</style>
</head>
<body>
<p id="x">hi</p>
<p id="i">hi</p>
<div style="backgound-color:blue;" onclick="x=1;">press me</div>
<script>
var myVar = setInterval(OnScreenVariables, 100);
var myVar = setInterval(Interval, 1000);
var i = 1, x = 0;
function Interval() {
console.log(i,x)
if (x == 1) {
i++;
if (i > 3) {
i = 1;
x = 0;
}
}
}
function OnScreenVariables() {
document.getElementById("i").innerHTML = i;
document.getElementById("x").innerHTML = x;
}
</script>
</body>
</html>
推荐阅读
- javascript - 反应:获取状态变量是未定义的错误
- c++ - 如何使用 redis-plus-plus 存储二进制数据,就像我想存储结构一样?@for_stack?
- c# - 发送电子邮件时 smtp 连接出错
- python - 如何为输出绘制图形,将第一个 col 作为标签,将第二个 col 作为值
- java - 将反应流拆分为 2 个流,然后使用关联 ID 再次合并它们?
- angular - Angular 应用程序也不显示任何内容,但应用程序未加载
- javascript - 如何解释在对象上使用 tostring() 的结果
- html - 用 CSS 编写雨云
- python - 如何在 qt 设计器中创建切换开关按钮?
- android - 构建 Gradle 应用程序“<”语法错误启动失败