Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.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
在Javascript中,是否可以从事件上下文中更改全局变量的值?_Javascript_Variables_Events - Fatal编程技术网

在Javascript中,是否可以从事件上下文中更改全局变量的值?

在Javascript中,是否可以从事件上下文中更改全局变量的值?,javascript,variables,events,Javascript,Variables,Events,也许这是个愚蠢的问题,但是: var a = { scrolled: false }; var handler = function() { a.scrolled = true; console.log(a.scrolled); // always "true" }; window.addEventListener('scroll', handler); console.log(a.scrolled); // always "false" 没有机会将a.scrolle

也许这是个愚蠢的问题,但是:

var a = {
   scrolled: false
};

var handler = function() {
    a.scrolled = true;
    console.log(a.scrolled); // always "true"
};

window.addEventListener('scroll', handler);
console.log(a.scrolled); // always "false"
没有机会将a.scrolled的值从事件内部更改为“外部”上下文


谢谢……

您的代码确实更改了值,而且它是全局更改的(假设您的代码在全局范围内)

这是因为在更改值时更改了值

更改该值不会使时间回到过去,并在将其打印到控制台之前进行更改


您过去打印的输出没有改变。

好的,感谢大家,特别是@patrick roberts为我指出了正确的示例。这是一个异步代码引用的问题,但我将保留这个问题/答案作为示例,因为我认为它更简单

var a = {
     scrolled: false
};

var handler = function() {
    a.scrolled = true;
};

window.addEventListener('scroll', handler);

setTimeout(function() {
       console.log(a.scrolled)} 
       , 10000);

// a.scrolled is kept "false" if, in 10 seconds, no scroll event happens...

处理程序在滚动时触发,
a.scrolled
false
,直到滚动为止。但是,第11行的
console.log(a.scrolled)
在加载JS时运行,而不是在滚动之后运行,因此脚本开始时将打印
false

一旦开始滚动,第8行的另一个
console.log(a.scrolled)
就会启动

因此,您将在控制台中看到如下内容:

false 
true 
true 
true 
true

第一个
false
输出来自第11行,其余来自处理程序内部的第8行。

全局变量就是全局变量。你总能找到他们。您可能只需要使用浏览器的全局对象
window
来完全限定引用。我想当滚动事件发生时,在那一刻,我最初设置为“false”的全局值会发生变化……我想我明白了您的意思,但您的答案真的很难理解。也许是措辞上的问题,但在我看来,在编程中谈论“时间旅行”只会增加混乱。@AmintaCode-确实如此。更改前打印到屏幕上的输出不会更改。
false 
true 
true 
true 
true