web学习—javascript学习—函数(三)

来源:互联网 发布:程序员修炼之道 怎么样 编辑:程序博客网 时间:2024/06/06 01:00
模块:
一个提供接口却隐藏状态与实现的函数或对象。利用模块其实可以完全来屏蔽对全局对象的使用。下面有个比较经典的例子:
String.method('deentityify',function(){
    var entity = {
        quot: '"',
        lt: '<',
        gt:'>'
    };
    return function(){
        return this.replace(/&([^&;]+);/g,function(){
            var r = entity[b];
            return typeof r==='string'?r:a;
        });
    };
}();)
注意最后一行的(),这个实际的给string添加的函数是return的函数。
这样就可以很好的利用模块来,保护好entity变量。

级联
有些方法没有返回值,如果由于某些原因不想让他返回undifined而是返回this,就可一利用级联了。
getElement('myDiv').move(350,150).width(100).height(100)...;

套用:
套用允许我们将函数与传递给他的参数相结合产生一个新的函数
function.method('curry',function(){
    var slice = Array.prototype.slice,
        args = slice.apply(arguments),
        that = this;
    return function (){
        return that.apply(null,args.concat(slice.apply(arguments)));
    };
});
var add1 = add.curry(1);
document.writlen(add1(6));

记忆:
函数借助对象来记住先前在函数中所计算的结果。
var fibonacci = function(){
    var nemo = [0,1];
    var fib = function(n){
        var result = memo[n];
        if(typeof result != 'number'){
            result = fib(n - 1)+fib(n - 2);
            memo[n] = result;
        }
        return result;
    };
}();

这个函数中,memo就是一个记忆对象。


对于这一篇,大部分是可以明白,但是在实际用时确实没怎么注意过。这个也许在以后写代码的多了就可遇到了吧。

暂且吧,几个例子放在这,便于以后理解使用。