Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.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
addEventListener JavaScript中定义的变量_Javascript_Variables_Addeventlistener - Fatal编程技术网

addEventListener JavaScript中定义的变量

addEventListener JavaScript中定义的变量,javascript,variables,addeventlistener,Javascript,Variables,Addeventlistener,在我的JS scirpt中有下面的代码。当我试图在代码下面打印任何已定义的变量时,控制台会说未定义变量。你能告诉我为什么吗?也许我应该先打电话给职能部门? 当我在下面定义变量并将其打印到控制台时,它工作得很好 代码如下: document.addEventListener("DOMContentLoaded", function(){ var homeElement = document.getElementById("home"); var childElements =

在我的JS scirpt中有下面的代码。当我试图在代码下面打印任何已定义的变量时,控制台会说未定义变量。你能告诉我为什么吗?也许我应该先打电话给职能部门? 当我在下面定义变量并将其打印到控制台时,它工作得很好

代码如下:

 document.addEventListener("DOMContentLoaded", function(){
     var homeElement = document.getElementById("home");
     var childElements = document.querySelector(".oferts").children;
     var banner = document.querySelector(".ban");
     var blocks = document.querySelectorAll(".block");
     var links = document.querySelector(".links").children;

 });

 console.log(homeElement); //Here I got info that this variable is not defined

提前感谢您的帮助

尝试将变量记录在函数内部

document.addEventListener("DOMContentLoaded", function(){
     var homeElement = document.getElementById("home");
     var childElements = document.querySelector(".oferts").children;
     var banner = document.querySelector(".ban");
     var blocks = document.querySelectorAll(".block");
     var links = document.querySelector(".links").children;

     console.log(homeElement);// <--
 });
document.addEventListener(“DOMContentLoaded”,function()){
var homelement=document.getElementById(“home”);
var childElements=document.querySelector(“.oferts”).children;
var banner=document.querySelector(“.ban”);
var blocks=document.queryselectoral(“.block”);
var links=document.querySelector(“.links”).children;

console.log(homelement);//这是因为变量是在事件侦听器函数的作用域中创建的,而console.log是在全局作用域中执行的。全局作用域无权访问变量作用域


您可以将console.log移动到函数中,也可以在函数外声明变量。

这里有两个问题:

  • 作用域内的
    var X
    将该变量设置为局部变量(而不是全局变量),因此不能在作用域外使用它。
    如果在全局中使用
    var X
    ,并且仅在范围内使用
    X=…
    ,则可以将变量设置为全局

  • 根据您的代码,
    console.log
    函数在
    addEventListener
    的回调函数之前运行,因此在运行时,尚未设置变量


  • 您可以在函数中创建变量,以便它们只能在函数中访问

    要使全局变量可访问,只需将其更改为以下内容:

     var homeElement;
     var childElements;
     var banner;
     var blocks;
     var links;
    
     document.addEventListener("DOMContentLoaded", function(){
       homeElement = document.getElementById("home");
       childElements = document.querySelector(".oferts").children;
       banner = document.querySelector(".ban");
       blocks = document.querySelectorAll(".block");
       links = document.querySelector(".links").children;
     });
    
     console.log(homeElement);
    

    您的变量是在本地定义的,无法在函数外部访问

    您可以删除
    var
    关键字,使变量成为全局变量,并且可以在脚本中的任何位置调用变量

    了解JavaScript作用域


    因为console.log行是在DOM准备就绪并调用侦听器之前执行的。此外,您的变量似乎是该处理程序的本地作用域。实际上,我在编写其他应答时编写了此应答。我在发布我的应答后阅读了其他应答。我的应答有什么问题吗?我没有说它错了,只是在发布时没有说这里已经有3个答案这么说了(其中至少有一个这么说)。