使用自调用匿名函数与使用普通函数

时间:2012-09-29 18:49:55

标签: javascript

我有一个变量,它是根据一个对象是否有一个长度作为其属性之一来设置的。如果没有,那么我需要检查是否存在其中一个属性。如果是,则获取存储在该对象中的第一个数组并返回长度,否则将该变量设置为1。这可以在这样的声明中合并。

var b=someObject;
var len = b.num||(b.arrs?(function(a){for(var x in a)return a[x].length})(b.arrs):false)||1;

另一种方法是拉出函数并像这样做

function getLength(a){for(var x in a)return a[x].length})
var b=someObject;
var len = b.num||(b.arrs?getLength(b.arrs):false)||1;

我想知道与其他方式相比,单向执行是否存在性能损失? javascript引擎如何看待它们有什么不同吗?我更喜欢第一种方式的原因是它让我无法拥有一堆额外的辅助函数。

1 个答案:

答案 0 :(得分:1)

执行并丢弃匿名内联版本。而单独的函数实例是

a)保留在内存中并弹出其余的局部变量,如果它在函数中声明

b)如果在全局空间中将其定义为窗口对象的成员,则在内存中保留页面的生命周期。

所以如果你不太可能再次需要它,最好采用我认为的匿名内联路线。