0

我听说在 JavaScript 中使元素全局化并不是一个好主意。我不明白为什么。这是IE无法处理的事情吗?

例如:

    div = getElementById('topbar');
4

4 回答 4

7

我不认为这是一个实施问题,而是一个好与坏的实践问题。通常 global * 是不好的做法,应该避免(全局变量等),因为您永远不知道项目的范围将如何演变以及您的文件将如何被包含在内。

我不是一个大的 JS 怪胎,所以我无法详细说明为什么 JS 事件不好,但是Christian Heilmann 在这里谈到了 JS 最佳实践,你可以看看。也可以尝试谷歌搜索“JS 最佳实践”

编辑:关于全局变量的维基百科,这也可能适用于您的问题:

[全局变量] 通常被认为是不好的做法,正是因为它们的非局部性:全局变量可能会在任何地方被修改(除非它们驻留在受保护的内存中)并且程序的任何部分都可能依赖于它。因此,全局变量具有创建相互依赖关系的无限潜力,并且添加相互依赖关系会增加复杂性。看远处的动作。但是,在少数情况下,全局变量可能适合使用。例如,它们可用于避免在多个函数中连续传递常用变量。

通过http://en.wikipedia.org/wiki/Global_variable

于 2009-04-27T18:18:05.530 回答
4

这是IE无法处理的事情吗?

,这不是 IE 的东西。您永远不能假设您的代码将是文档中使用的唯一脚本。因此,确保您的代码没有其他脚本可以覆盖的全局函数或变量名称非常重要。

有关示例,请参阅与他人玩得好。

于 2009-04-27T18:14:41.200 回答
2

我假设“事件”是指事件处理 JavaScript(函数)。

一般来说,在 JS 中使用多个全局变量是不好的。(如果您要存储任何数据以供将来使用,则不可能不使用至少一个。)这是因为它遇到了与所有命名空间试图解决的问题相同的问题——如果您编写了一个方法 doSomething() 而其他人编写了一个称为 doSomething() 的方法?

解决这个问题的最好方法是创建一个全局变量,它是一个保存所有数据和函数的对象。例如:

var MyStuff = {};
MyStuff.counter = 0;
MyStuff.eventHandler = function() { ... };
MyStuff.doSomething = function() { ... };

// Later, when you want to call doSomething()...
MyStuff.doSomething();

这样,您对全局命名空间的污染最小;您只需要担心其他人使用您的全局变量。

当然,如果您的代码永远不会与其他人的代码一起使用,那么这一切都不是问题……但是如果您最终使用了其他人的代码,这种想法会在以后咬您一口。只要每个人都在 JS 全局名称方面表现良好,所有代码都可以相处。

于 2009-04-27T18:23:47.933 回答
1

只要您将全局变量包装在唯一的命名空间/对象中(以避免与不属于您的脚本发生冲突),在代码中使用全局变量应该没有任何问题

在 javascript 中使用全局变量的主要优势源于 javascript 不是一种强类型语言。因此,如果您将一些复杂的对象作为参数传递给函数,您将可能会失去这些对象的所有智能(在函数范围内)。而使用全局对象,则会保留该智能。

我个人觉得这非常有用,而且它肯定在我的代码中占有一席之地。

(当然,应该始终在语言环境和全局变量之间做出正确的平衡)

于 2012-07-15T07:18:38.007 回答