模式之下

惰性函数

如果函数内一个判断是不会变的,那不需要每次运行此函数时再次去判断

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方法

原文地址:https://www.cnblogs.com/LiangHuang/p/6413921.html