JS中有多少Vars太多了?

时间:2014-03-26 16:26:20

标签: javascript variables object

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

现在页面正在增长,每个项目都有自己的功能。根据D. Crockford的说法,无论如何,每个函数都放在VAR中:

function functionName(){}

相当于:

var var1 = functionName(){}

所以现在我们在页面中有很多变量(我也用Crockford先生提倡的后一种格式编写它们)我担心这会产生太多变量(不确定这会导致任何问题,性能或其他)。我正在考虑制作一个Object Literal并将每个函数作为值添加到键中。我认为这将把所有这些变量减少到一个可管理的单位并减少我使用的变量(并避免任何潜在的问题) - 或者它会吗?

谢谢!

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

在性能方面并不重要,你可以根据需要使用尽可能多的变量,性能只会受到函数中执行的任务的影响。

答案 2 :(得分:1)

随着您不断增加变量,相关JS引擎设置的堆限制将发挥作用。

对于例如-V8引擎seems to have,它设置为1.4 GB

如果你没有用完,那么现在是时候重新检查一下代码&停止责备JS。

从严肃的角度来看,从实际的角度来看,这是一个巨大的限制,它告诉你,你不必担心这么多。

除了友好的邻居,GC还会一直保持清洁和放松。确保你用变量大量生活。

答案 3 :(得分:0)

将代码封装在命名空间中是一个好主意,但是你不会通过这种方式节省内存或提高性能。从表现的角度来看,你所展示的两种方式都是一样的 根据恢复的域,有一个避免名称缩写的约定 - 想象一下为lib做的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(){};

Almost因为第一种形式functionName定义在parse-time,而后一种形式定义functionName run-time