Function模式 -- 深入理解javascript

/*
    一、回调函数
    函数A作为另外一个函数B的参数
*/
    var menuId = $("ul.nav").first().attr("id");
    var request = $.ajax({
        url: "script.php",
        type: "POST",
        data: { id: menuId },
        dataType: "html"
    });
    //调用成功时的回调处理
    request.done(function (msg) {
        $("#log").html(msg);
    });
    //调用失败时的回调处理
    request.fail(function (jqXHR, textStatus) {
        alert("Request failed: " + textStatus);
    });
/*
    二、配置对象模式
    如果一个函数的参数只有一个参数,且参数为对象
*/
    addPerson({
        username: "shichuan",
        first: "Chuan",
        last: "Shi"});
/*
    三、返回函数
    一个函数的返回值为另外一个函数,或者根据特定的条件灵活创建的新函数
*/
    var setup = function () {
        console.log(1);
        return function () {
            console.log(2);
        }
    }
    var my = new setup();//1
    my();//2
    //或者
    setup()();//1//2

    //利用闭包的特性,记录私有静态属性
    var myFunc = function () {
        var count = 0;
        return function () {
            return ++count;
        }
    }
    var myObj = new myFunc();
    myObj();
    myObj();
/*
    四、偏应用
    参数的传入工作分开进行
*/
/*
    五、Currying
    将多个参数的处理转化成单个参数的处理,类似链式调用
*/
    function add(x, y) {
        var a = x, b = y;
        if (typeof b ==="undefined") {
            return function (newY) {
                return a + newY;
            }
        }
        return x + y;
    }
    var add2000 = add(2000);
    add2000(10); // 2010
/*
    六、立即执行的函数
*/
    (function () {
        //声明函数后,立即执行函数
    }());
    //以下4项:都是立即执行函数
    !function () { }();
    -function () { }();
    +function () { }();
    ~function () { }();
/*
    七、立即执行的刚创建对象里的函数
*/
    ({
        name: "123",
        init: function () { }
    }).init();
/*
    八、分支初始化
    根据不同的条件(场景)初始化不同的代码,也就是所谓的条件语句赋值
*/
/*
    九、自声明函数
    一般是在函数内部,重写同名函数代码
*/
/*
    十、内存优化
    该模式主要是利用函数的属性特性来避免大量的重复计算
*/
    var myFunc = function (param) {
        if (!myFunc.cache[param]) {
            var result = {};
            // ... 复杂操作 ...
            myFunc.cache[param] = result;
        }
        return myFunc.cache[param];
    };

    // cache 存储
    myFunc.cache = {};

 

posted @ 2015-07-28 20:33  RyanRuan  阅读(243)  评论(0编辑  收藏  举报
View Code