将Javascript代码封装在对象中会影响性能吗?

Fra*_*ank 5 javascript encapsulation

我想知道将JavaScript代码的主体封装在对象中是否效率更高或更低?这样,程序的整个范围将与窗口等其他范围分开.

例如,如果我在JavaScript文件中有以下代码:

/* My main code body. */
var somevar1=undefined;
var somevar2=undefined;
var somevarN=undefined;

function somefunction(){};

function initialize(){/* Initializes the program. */};
/* End main code body. */
Run Code Online (Sandbox Code Playgroud)

我可以将主代码体封装在一个对象中:

/* Encapsulating object. */
var application={};
application.somevar1=undefined;
application.somevar2=undefined;
application.somevarN=undefined;

application.somefunction=function(){};

application.initialize=function(){/* Initializes the program. */};
Run Code Online (Sandbox Code Playgroud)

我的逻辑是,由于JavaScript搜索范围内的所有变量,直到找到正确的变量,因此将应用程序特定的函数和变量保留在自己的范围内将提高效率,尤其是在存在大量函数和变量的情况下.

我唯一关心的是这是不好的做法,或者这可能会增加新"应用程序"范围内变量和函数的查找时间.如果这是不好的做法或完全没用,请告诉我!谢谢!

Pau*_*ite 3

我\xe2\x80\x99不知道性能影响是什么(我怀疑它们\xe2\x80\x99无论怎样都可以忽略不计,但如果你\xe2\x80\x99真的关心,测试它),但它\xe2\x80 \x99 在 JavaScript 中非常常见的做法是将代码块保留在自己的范围内,而不是将所有内容都放在全局范围内。

\n\n

主要好处是降低意外覆盖全局范围内的变量的风险,并使命名更容易(即您可以使用window.application.initializeeg代替window.initialize_application)。

\n\n

您可以使用自调用函数来为一小段代码创建一个范围区域,而不是上面的实现。这称为模块模式

\n\n

这样做的另一个优点是允许您创建只能在模块内访问的 \xe2\x80\x9cprivate\xe2\x80\x9d 变量,因此不能从同一全局对象中运行的其他代码访问\xe2\x80\x99t :

\n\n
/* Encapsulating object. */\nvar application=( function () {\n    var someprivatevar = null// This can\'t be accessed by code running outside of this function\n      , someprivatefunction = function () { someprivatevar = someprivatevar || new Date(); };\n\n    return {\n        somevar1: undefined\n      , somevar2: undefined\n      , somevarN: undefined\n      , somefunction: function(){}\n      , getInitialized: function () { return someprivatevar; }\n      , initialize: function (){/* Initializes the program. */ someprivatefunction(); }\n    };\n\n})();\n\napplication.initialize();\napplication.getInitialized();// Will always tell you when application was initialized\n
Run Code Online (Sandbox Code Playgroud)\n