Variables defined in addEventListener JavaScript
我在我的JS Scirpt的Begining中有下面的代码。当我尝试在代码下面打印任何已定义的变量时,控制台说变量没有定义。你能告诉我为什么吗?也许我应该先打电话给Funtion?当我在下面定义变量,然后将其打印到控制台时,它可以正常工作。
代码如下:
1 2 3 4 5 6 7 8 9 10 | 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 |
提前感谢您的帮助!
变量是在本地定义的,无法在函数外部访问。
您可以删除
了解javascript范围
javascript局部和全局变量混淆
解除JavaScript变量范围的神秘化和提升
javascript范围
在函数内部创建变量,这样它们只能在函数内部访问。
要使全局可访问变量,只需将其更改为以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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); |
这是因为变量是在事件侦听器函数的作用域中创建的,而console.log是在全局作用域中执行的。全局范围没有访问变量范围的权限。
您可以将console.log移到函数中,或者在函数外部声明变量。
尝试将变量记录在函数内部
1 2 3 4 5 6 7 8 9 | 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);// <-- }); |
您的问题是因为
这里有两个问题:
作用域内的
如果在全局中使用
根据您的代码,