Javascript JS中有多少变量太多?

Javascript JS中有多少变量太多?,javascript,variables,object,Javascript,Variables,Object,我有一个我正在构建的页面,我们解决问题的方法是将一些代码包装到函数中,然后在需要时调用它 现在页面正在增长,每个项目都有自己的功能。根据D.Crockford,每个函数都放在一个变量中,因此: function functionName(){} 相当于: var var1 = functionName(){} 因此,现在我们在页面中有很多变量(我也专门用Crockford先生提倡的后一种格式编写了它们),我担心这会产生太多变量(不确定这是否会导致任何问题、性能或其他)。我正在考虑创建一个文本

我有一个我正在构建的页面,我们解决问题的方法是将一些代码包装到函数中,然后在需要时调用它

现在页面正在增长,每个项目都有自己的功能。根据D.Crockford,每个函数都放在一个变量中,因此:

function functionName(){}
相当于:

var var1 = functionName(){}
因此,现在我们在页面中有很多变量(我也专门用Crockford先生提倡的后一种格式编写了它们),我担心这会产生太多变量(不确定这是否会导致任何问题、性能或其他)。我正在考虑创建一个文本对象,并将每个函数作为一个值添加到一个键中。我认为这将把所有这些变量减少到一个可管理的单元中,并减少我使用的变量数量(并避免任何潜在的问题)——或者会吗


谢谢

就性能而言,这无关紧要,您可以根据需要使用任意多的变量,性能只会受到函数中执行的任务的影响。

var关键字实际上是用来管理变量范围的。
不使用var关键字会使变量成为全局变量。当不再使用变量时,变量占用的内存将被清除。大多数现代浏览器都包含一个垃圾收集器,负责释放未使用的空间。因此,建议在块中使用var关键字可以减少js解释器对变量的搜索,否则它将搜索整个文档以获得值。

将代码封装在名称空间中是一个好主意,但这样既不会节省内存,也不会提高性能。从性能角度看,您所展示的两种方式是相同的。
有一个惯例可以避免名称冲突,但是基于还原的域-想象一个JS库是为这样做的:

 // The following two lines are to protect namespace from overwriting and allow to
 // extend them easily
 if (!com) var com = {};
 if (!com.stackoverflow) com.stackoverflow = {};

 com.stackoverflow.renderSomething = function(){
     // Some very clever code here
 };
通过这种方式,您没有其他收获,但这样组织代码是值得的

我想澄清一下:

function functionName(){};
几乎与相同吗

var functionName = function(){};

几乎
因为第一种形式的
函数名
是在
解析时定义的
,而后一种形式的
函数名
是在
运行时定义的
随着变量的不断增加,相关JS引擎设置的堆限制将发挥作用

对于eg-V8发动机,它设置为1.4 GB

如果你真的用完了它,那么是时候重新检查代码了&不要再责怪JS了

严肃地说,从实际的角度来看,这是一个巨大的限制,它告诉你,你不需要太担心它


除此之外,友好的邻居GC将始终保持清理,确保您的生活充满变数。

使用大型对象将防止垃圾收集。它们不同,请参阅:单一可管理单元方法是名称空间;名称空间方法允许您将代码紧密打包在逻辑命名的单元中,这在单页应用程序中没有什么好处,但可以提高代码的组织/可读性,并防止对全局名称空间的污染。非常感谢,很好的提示…
使用var关键字会使变量成为全局变量
“当然不会,省略
var
会使变量成为全局变量。Teemu,谢谢,这是输入错误,我的错。太棒了!这就是我一直在思考的“潜在问题”——一切都有其局限性……太好了。如果你发现一个答案如此令人满意,你可以在答案旁边打上绿色的勾号。老实说,AlexK在原始帖子下的评论最能回答我的问题……这很好,因为它告诉了我目前的方法会出什么问题……当然。你甚至可以把所有有用的观点整合成一个答案&发布+自己接受。我们的目标只是帮助任何人在将来找到正确的答案。可以肯定的是,这只会影响运行时(比如当/如果调用一个包含所有这些变量的函数时-全局变量如何?),否则它只会是页面上的文本,或者在运行时,在加载页面时是否会对所有内容进行评估?是否存在性能差异?为什么Crockford先生说要做后者而不是前者?不,没有性能差异。