介绍 本文介绍了初始化
模式和
性能模式,主要用于初始化和性能改进。有些模型以前已经提到过,但这里只是一个总结。
立即
执行的
函数。
我们在立即调用函数表达式系列中的第四部分中
详细描述了类似的函数。这里我们只举两个简单的例子来总结。
复制代码代码如下所示:
在结束语句函数之后,函数立即执行。
(函数(){())
console.log(见证了!;
}();
此语句函数,也可以立即执行。
函数(){
console.log(见证了!;
(});
下面的
方法可以是:
函数(代码);
-函数(代码);
+函数(代码);
立即执行的对象初始化
这种模式的意义是立即声明一个对象(而不是函数),并立即在对象初始化中执行一个方法,通常这种模式可以应用于一次执行的代码。
复制代码代码如下所示:
({
在这里您可以定义常量,
设置另一个值。
最大:600,
最大高度:400,
当然,我们也可以定义实用
工具方法。
gimmemax:函数(){
返回this.maxwidth +X+ this.maxheight;
},
初始化
init:函数(){
console.log(this.gimmemax());
更多代码…
}
(init)};这将初始化。
分支的初始化
分支初始化是初始化不同的
条件(场景)来初始化不同的代码,也就是所谓的条件语句赋值。在我们做事件
处理之前,我们通常使用以下代码:
复制代码代码如下所示:
VaR工具= { {
AddListener:
功能(EL型,FN){
如果(typeof window.addeventlistener = 'function){
El.addEventListener(型、FN、假);
如果(typeof document.attachevent别的}!= = 'undefined){
El.attachEvent(开+型,FN);
{人}
埃尔{开+型} = FN;
}
},
RemoveListener:功能(EL型,FN){
}
};
让我们改进。首先,我们必须定义两个接口,一个用于添加事件句柄,另一个用于
删除事件句柄。代码如下:
复制代码代码如下所示:
VaR工具= { {
AddListener:空,
RemoveListener:空
};
实现代码如下所示:
复制代码代码如下所示:
如果(typeof window.addeventlistener = 'function){
utils.addlistener =功能(EL型,FN){
El.addEventListener(型、FN、假);
};
如果(typeof document.attachevent别的}!= = 'undefined){ / /伊江
utils.addlistener =功能(EL型,FN){
El.attachEvent(开+型,FN);
};
utils.removelistener =功能(EL型,FN){
El.detachEvent(开+型,FN);
};
}其他旧
浏览器
utils.addlistener =功能(EL型,FN){
埃尔{开+型} = FN;
};
utils.removelistener =功能(EL型,FN){
埃尔{开+型} = null;
};
}
使用它很方便吗代码也更加优雅。
自我声明函数
函数通常重写同一名称函数的代码,例如:
复制代码代码如下所示:
无功scareme =函数(){()
警报(嘘!;
scareme =函数(){
警报()!;
};
};
这段代码很容易混淆。让我们先看看示例的执行
情况:
复制代码代码如下所示:
1。添加新
属性 scareme.property =
正确;
2。 / / scareme为新值
VaR的恶作剧= scareme;
三.调用方法
var = {
嘘:scareme
};
使用新的变量名
(恶作剧)!
(恶作剧)!
console.log(恶作剧性质); / /正确
使用方法调用
(幽灵,嘘)!
(幽灵,嘘)!
console.log(怪异。嘘。财产); / /正确
通过执行的结果,我们可以
发现分配的功能和新的变量(或内部方法)不执行重负荷scareme码,而下面的例子是相反的。
复制代码代码如下所示:
使用自声明/函数
ScareMe(双); / /嘘!
ScareMe(双); / /嘘!
console.log(scareme。财产); / /未定义
当你使用这个模式时,你必须非常小心。否则,实际结果可能与您预期的不同。当然,您也可以使用这种特殊技术进行一些特殊
操作。
内存优化 该模型主要利用函数的性质避免大量重复计算:
复制代码代码如下所示:
VaR MyFunc =函数(
参数){
如果(!MyFunc。{ }){缓存参数
var结果{ };
复杂操作…
MyFunc。{ } =结果缓存参数;
}
返回MyFunc。缓存参数} {;
};
高速缓存
myfunc.cache = { };
但是,上面的代码有一个问题。如果参数是字符串或其他一些常见的方法类似于对象,会有问题。在这个时候,我们需要使用传说中的hasownproperty方法。代码如下:
复制代码代码如下所示:
VaR MyFunc =函数(参数){
如果(!MyFunc.cache.hasOwnProperty (param)) {
var结果{ };
复杂操作…
MyFunc。{ } =结果缓存参数;
}
返回MyFunc。缓存参数} {;
};
高速缓存
myfunc.cache = { };
如果你
输入的参数很多,你可以生成这些参数通过JSON的stringify法生产用于存储缓存的密钥值。代码如下:
复制代码代码如下所示:
VaR MyFunc =函数(){()
VaR缓存的密钥= json.stringify(array.prototype.slice.call(参数)),
结果;
如果(!MyFunc。缓存缓存的密钥){ } {
结果= { };
复杂操作…
MyFunc { } =结果缓存缓存的密钥;
}
返回MyFunc。缓存缓存的密钥} {;
};
高速缓存
myfunc.cache = { };
或多个参数,也可以使用arguments.callee特征:
复制代码代码如下所示:
VaR MyFunc =函数(参数){
var = arguments.callee,
结果;
如果(!f.cache {参数}){
结果= { };
复杂操作…
f.cache { } =结果参数;
}
返回参数f.cache { };
};
高速缓存
myfunc.cache = { };
总结
你不必总结,仔细看看代码。