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)。函数需要一个全局变量,用于您要每次递增值的场景。这是不正确的-只需使用闭包正确地定义变量的作用域,以便它只在需要可见的地方可见。全局变量几乎从来都不是必需的。请详细说明一下为什么不喜欢onclick?这些信息可能会对医生有所帮助,非常感谢。我是一个新的开发人员,甚至不知道生命的存在:)现在一切都变得更有意义了。我的最后一个问题是试图通过函数传递一个参数,使其可重用。我似乎想不出来。。如果你愿意,我将把我的问题附在这里。不管怎样,我非常感谢你的帮助!
<div class="style" onclick="typeWriter()">
document.querySelector('div').addEventListener('click', typeWriter);