模式之下
惰性函数
如果函数内一个判断是不会变的,那不需要每次运行此函数时再次去判断
var fn = (function(judge,parms){
if(judge){
return function(parms){
...
}
}else{
return function(parms){
...
}
}
})()
在声明函数时,就去判断
var fn = function(judge,parms){
if(junge){
fn=function(parms){
...
}
}else{
fn=function(parms){
...
}
}
};
防篡改对象---ES5添加
不可扩展对象---不能添加,能修改与删除
设置-Object.preventExtensions()
检测-Object.isExtensible()
---能否扩展
密封对象---不能添加删除,能修改
设置-Object.seal()
检测-Object.isSealed()
---是否被密封(当为true,isExtensible返回false)
冻结对象---无法添加删除修改
设置-Object.freeze()
检测-Object.isFrozen()
高级定时器
1.间隔执行
setTimeout(function(){
...
setTimeout(arguments.callee,1000)
},1000)
2.数组分组计算
function group (arr,fn,context){
setTimeout(function(){
var item = arr.shift(); --- 取数组第一位
fn.call(context,item); --- 数组第一位作为参数进入fn在context环境中计算
if(arr.length>0){
setTimeout(arguments.callee.100) --- 如果arr仍有元素,100ms后再执行
}
},100)
}
3.函数节流
function economy (fn,context,interval){
clearTimeout(fn.tId);
fn.tId = setTimeout(function(){
fn.call(context)
},interval);
}
window.onscroll=function(){
economy(fn,this,1000) 最少1000ms才会执行一次fn
}
module模式
var medule=(function(){
var app={};
app.name="1";
app.add=function(){
console.info("add1");
};
return app;
})();
子模块
medule.view=(function(){
var app={};
app.name="viewname"
return app;
})();
松耦合扩展
var medule_extend=(function(medule){
//扩展
return medule
})(medule||{})
紧耦合扩展
var medule_extend=(function(medule){
medule.oldname=medule.name;
medule.name="3";
medule.add=function(){
console.info("add2");
};
return medule;
})(medule);
*模块化
模块,就是将方法属性等封装起来
1.通过对象
var module={
a:function(){};
b:"x";
};---内部属性都是暴露的,当然可以通过设置属性的属性来控制;
2.通过立即执行函数
var module=(function(){
var a=function(){};
var b="x";
return{
a:a,
b:b
}
})();
3.模块组合放大
var module_one=(function(mod){
mod.a=function(){};
return mod;
})(window.module_one||{});
var module_one=(function(mod){
mod.b=function(){};
return mod;
})(window.module_one||{});
在module_one模块中添加a方法,然后添加b方法