当我在JS中进行开发时,我经常面临在使用内部函数(闭包)捕获变量和使用对象之间的选择。
内部函数:
var x = ...;
var f = function() {
// use x here
}
对象:
obj.x = ...;
obj.f = function() {
// use x here
}
内部函数方法“感觉”更自然,但我想知道--这样或那样做是否会影响性能,以及做这类事情最常用的方法是什么?
发布于 2013-06-27 07:42:28
在一个普通PC拥有8 8GB的时代,闭包对对象属性的内存使用似乎无关紧要。在任何情况下,在非平凡的应用程序中,仅使用闭包或仅使用属性值是非常不可能的。
如果您有一个代码模块,那么对仅由该模块的方法在内部使用的变量使用闭包是有意义的。对于需要在模块之间共享的值,使用属性也很有意义,而不需要使用getter和setter(例如,在您希望使用obj.property
而不是obj.getProperty()
的地方)。
此外,属性访问比使用函数检索值要高效得多,但是getter和setter可以提供比简单地读取或赋值更重要的功能(例如,值验证和完整性检查)。
一如既往,根据合适的标准(速度、代码可维护性、健壮性、跨浏览器支持等)使用适合您的应用程序。
发布于 2013-06-27 07:11:39
实际上你在第二种情况下分配了额外的对象,否则它们在我看来是一样的。
函数是JS中的第一类对象,很容易忘记,任何时候您看到function(){}
都会分配一个相对较胖的新函数对象。您可以将其视为看到new Function()
被调用,如果这使对象分配对您更明显的话。
只有当你有一个“构造函数”在其中定义函数并返回一个指向这些函数的对象时,这才是有害的。这些函数中的每一个都是在从构造函数创建的对象之上创建的单独对象。这些函数将很容易占用比对象及其数据本身多10-100倍的内存,这当然取决于数据和方法的数量。
如果您正在编写应用程序,则很容易考虑是否需要担心它。如果您知道您的应用程序根本不会创建许多对象,那么从更大的角度来看,内存浪费并不是那么糟糕。如果您正在编写通用库等,请不要为您无法预测需求的应用程序开发人员做这些假设。
https://stackoverflow.com/questions/17331828
复制相似问题