首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何缓存/预计算一些东西(没有全局变量)?

如何缓存/预计算一些东西(没有全局变量)?
EN

Stack Overflow用户
提问于 2011-06-14 03:12:40
回答 6查看 1.1K关注 0票数 2

我想要做的是在两个处理程序之间发送数据。

代码语言:javascript
运行
复制
element.onmousedown = function() {
    data = precalculate();
}

element.onmouseup = function() {
    dosomething(data);
}

如果data是一个全局变量,那么它就可以工作。人们说全局变量是邪恶的。但我不知道没有它该怎么办。

或者我误解了“全局变量”?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-06-14 03:18:51

如果你不想/需要变量是全局的,只需限定它的作用域:

代码语言:javascript
运行
复制
(function() {
    var data;
    element.onmousedown = function() {
        data = precalculate();
    }

    element.onmouseup = function() {
        dosomething(data);
    }
})();

javascript EDIT:澄清一下,在中创建新变量作用域的唯一方法是在函数中。

在函数内部使用var声明的任何变量对于外部作用域都是不可访问的。

在上面的代码中,我创建了一个IIFE (立即调用的函数表达式),它只是一个在创建后立即调用的函数,并且我将data变量(以及处理程序赋值)放在其中。

因为处理程序是在可以访问data变量的作用域中创建的,所以它们保留了对该变量的访问权限。

再举一个例子:

代码语言:javascript
运行
复制
var a = "a"; // global variable

(function() {

    var b = "b";  // new variable in this scope

    (function() {

        var c = "c";  // new variable in this scope

        // in this function, you have access to 'a', 'b' and 'c'

    })();

    // in this function you have access to 'a' and 'b' variables, but not 'c'

})();

// globally, you have access to the 'a' variable, but not 'b' or 'c'
票数 5
EN

Stack Overflow用户

发布于 2011-06-14 03:14:53

在这种情况下,全局变量是有意义的。另一种可能是将值附加到DOM元素:

代码语言:javascript
运行
复制
element.onmousedown = function() {
    // 'this' should point to the element being mouse downed
    this.data = precalculate(); 
};

element.onmouseup = function() {
    // 'this' should point to the element being mouse upped
    var data = this.data;
    dosomething(data);
};
票数 3
EN

Stack Overflow用户

发布于 2011-06-14 03:15:14

你误解了“全局变量是邪恶的”。

事实上,实际发生的情况是,有人想成为“人群中的一部分”,因此告诉你一个全面的概括,而实际上他们应该说“只在适当的地方使用全局变量”。

它们在这里很合适,我的朋友。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6335070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档