Javascript 变量仅在声明为局部时定义

Javascript 变量仅在声明为局部时定义,javascript,Javascript,因此,我有一个onclick()按钮链接到一个函数,该函数应该将display属性更改为none并返回一种类似于模态的方式, 以下是函数: function setcart() { cart.style.display = "block"; } 这是变量: var cart = document.getElementsByClassName('cart-wrapper') [0]; 当我在函数中声明变量时,一切正常,问题是我希望能够将该变量用于另一个函数,所以我将其设置在函数外部,这

因此,我有一个
onclick()
按钮链接到一个函数,该函数应该将
display
属性更改为none并返回一种类似于模态的方式, 以下是函数:

function setcart() {
  cart.style.display = "block";
  }
这是变量:

var cart = document.getElementsByClassName('cart-wrapper') [0];
当我在函数中声明变量时,一切正常,问题是我希望能够将该变量用于另一个函数,所以我将其设置在函数外部,这是我在浏览器控制台中得到的结果

cart.js:9 Uncaught TypeError: Cannot read property 'style' of undefined

如果您有任何帮助,我们将不胜感激。

请尝试等待您的内容加载,并在执行任何javascript之前做好准备。把你的代码放在

document.addEventListener('DOMContentLoaded', function(){ 
    // your code goes here
}, false);

如果不在上下文中查看代码,很难准确地说出来,但我猜代码的顺序意味着
cart
由于某种原因没有作用域

也就是说,您应该尽可能避免使用这样的全局/全局范围变量,而是使用消息传递。像这样更改范围广泛的值将导致很难排除的bug。相反,我建议将对
cart wrapper
的引用传递到要使用的函数中。像这样:

功能设置购物车(购物车){
cart.style.display=“block”;
}

编辑:另外,正如其他人指出的,您可能希望将整个表达式包装在
DOMContentLoaded
listener

中。初始化可能在构建DOM之前发生,因此在代码运行时没有匹配的元素。我在文档末尾导入函数,据我所知,这应该可以防止类似的事情发生。如果没有看到您的代码,就不可能说出为什么没有匹配的元素,但这显然是正在发生的事情。
var cart=document.getElementsByClassName('cart-wrapper')[0]?它在函数中吗?然后你应该有一个
var图表和一个
cart=document.getElementsByClassName('cart-wrapper')[0]函数内部。你应该遵循Mahatmasamatman的答案,并将变量赋值放入一个加载了文档的侦听器中。谢谢你的答案,我会在有机会的时候尝试一下,顺便说一句,我没有更改变量,只是更改了它的样式。我想我的总体观点是拥有一些全局可访问的“东西”然后,从不同的地方调用它的方法可能会使以后很难尝试准确地确定对
cart.style.display
(如果您有多个)的调用中的哪一个实际上正在进行更改。我需要添加所有函数吗?还是仅仅是变量?我只是将变量包装在事件侦听器中,但它仍然不起作用,我认为这不是问题所在,因为只有在dom完全加载后才能调用该函数