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搜索范围内的所有变量,直到找到正确的变量,因此将应用程序特定的函数和变量保留在自己的范围内将提高效率,尤其是在存在大量函数和变量的情况下.
我唯一关心的是这是不好的做法,或者这可能会增加新"应用程序"范围内变量和函数的查找时间.如果这是不好的做法或完全没用,请告诉我!谢谢!
我\xe2\x80\x99不知道性能影响是什么(我怀疑它们\xe2\x80\x99无论怎样都可以忽略不计,但如果你\xe2\x80\x99真的关心,测试它),但它\xe2\x80 \x99 在 JavaScript 中非常常见的做法是将代码块保留在自己的范围内,而不是将所有内容都放在全局范围内。
\n\n主要好处是降低意外覆盖全局范围内的变量的风险,并使命名更容易(即您可以使用window.application.initializeeg代替window.initialize_application)。
您可以使用自调用函数来为一小段代码创建一个范围区域,而不是上面的实现。这称为模块模式。
\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\nRun Code Online (Sandbox Code Playgroud)\n