Javascript 功能赢得';没有全局变量就不能工作?
我知道这可能是一个非常新手的问题,但我似乎在任何地方都找不到答案,我也不明白为什么会发生这种情况。所以,冒着被否决的风险。。。我希望在这里找到答案 我几乎可以让我的代码按我所希望的方式工作,但我不想使用任何全局变量。但是,每当我将此变量放入任何函数时,代码都会停止工作 我将非常感谢您的一些见解。如果这个问题已经被问了一千次,我很抱歉。它们是我理解全局/本地绑定的方式-这不应该发生吗 这是我的代码,在我试图放置变量而不是函数顶部的任何地方都会有注释 提前谢谢。Javascript 功能赢得';没有全局变量就不能工作?,javascript,dom,Javascript,Dom,我知道这可能是一个非常新手的问题,但我似乎在任何地方都找不到答案,我也不明白为什么会发生这种情况。所以,冒着被否决的风险。。。我希望在这里找到答案 我几乎可以让我的代码按我所希望的方式工作,但我不想使用任何全局变量。但是,每当我将此变量放入任何函数时,代码都会停止工作 我将非常感谢您的一些见解。如果这个问题已经被问了一千次,我很抱歉。它们是我理解全局/本地绑定的方式-这不应该发生吗 这是我的代码,在我试图放置变量而不是函数顶部的任何地方都会有注释 提前谢谢。 隐藏我 //Javascri
隐藏我
//Javascript
let letCounter = 0; //Do not want this as a global variable
function hideInitText() {
let hide = document.getElementById("remove");
hide.classList.add("hide");
//let letCounter = 0; //I tried here
}
hideInitText();
function typeWriter() {
//let letCounter = 0; //I tried here
let cycle, classCounter; //establish the cycle and counter
cycle = document.querySelectorAll("#type"); //cycle includes the .type class
for (classCounter = 0; classCounter < cycle.length; classCounter++) { //for loop that actually cycles
//let letCounter = 0; //I tried here
typeOut();
}
function typeOut() {
//let letCounter = 0; //I tried here
let speed = 50; //speed in milliseconds
let typewriter = "Type me out"; //document.querySelectorAll(".type");
if (letCounter < typewriter.length) {
//let letCounter = 0; //I tried here
//hide.classList.remove("hide"); //unhide the text
cycle[classCounter].innerHTML += typewriter.charAt(letCounter);
letCounter++;
setTimeout(typeWriter, speed);
}
}
};
让letCounter=0//不希望将其作为全局变量
函数hideInitText(){
让hide=document.getElementById(“删除”);
hide.classList.add(“hide”);
//让letCounter=0;//我在这里尝试过
}
hideInitText();
功能打字机(){
//让letCounter=0;//我在这里尝试过
让循环,类计数器;//建立循环和计数器
cycle=document.queryselectoral(#type”);//cycle包含.type类
for(classCounter=0;classCounter
函数需要一个全局变量,用于您要每次递增值的场景
更复杂的解决方案是在html中更改一个名为“value”的属性,每次将其视为全局变量时读取并设置它 一个问题是
<div class="style" onclick="typeWriter()">
如果您希望将letCounter
的作用域仅限于脚本,则可以将其(以及其他所有内容)放入IIFE中。这样,letCounter
的范围就被限制在您的模块中,而不是全局的:
(()=>{
设letCounter=0;
函数hideInitText(){
让hide=document.getElementById(“删除”);
hide.classList.add(“hide”);
}
hideInitText();
功能打字机(){
让循环,类计数器;//建立循环和计数器
cycle=document.queryselectoral(#type”);//cycle包含.type类
for(classCounter=0;classCounter
隐藏我
您可以像这样将letCounter添加到DOM中
const-element=document.getElementById('counter');
让letCounter=element.dataset.count代码>
您可以在函数中传递值,如打字机(0)如果您不想定义全局变量,请在函数中使用code>。函数需要一个全局变量,用于您要每次递增值的场景。这是不正确的-只需使用闭包正确地定义变量的作用域,以便它只在需要可见的地方可见。全局变量几乎从来都不是必需的。请详细说明一下为什么不喜欢onclick?这些信息可能会对医生有所帮助,非常感谢。我是一个新的开发人员,甚至不知道生命的存在:)现在一切都变得更有意义了。我的最后一个问题是试图通过函数传递一个参数,使其可重用。我似乎想不出来。。如果你愿意,我将把我的问题附在这里。不管怎样,我非常感谢你的帮助!
<div class="style" onclick="typeWriter()">
document.querySelector('div').addEventListener('click', typeWriter);