• 模式之下


    惰性函数

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

    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方法
    
    
  • 相关阅读:
    leetcode目录
    Windows下tuxedo配置
    实习总结
    n人比赛,可轮空,比赛轮数和场数
    Ubuntu中Eclipse安装与配置
    Lunix中文乱码解决方案
    tuxedo入门
    useradd和adduser的区别
    每个位上都是素数
    TUXEDO错误解决方案
  • 原文地址:https://www.cnblogs.com/LiangHuang/p/6413921.html
Copyright © 2020-2023  润新知