zoukankan      html  css  js  c++  java
  • 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 = {};
  • 相关阅读:
    [开心一笑]学妹写的函数
    Silverlight Fundamentals
    北京火车订票电话一览
    Silverlight 2 RTW tomorrow and more goodness
    [转]什么是“29岁现象”?
    看起来很像算法问题的CSS问题
    火狐不支持innerText的解决办法
    纯JS的表单邮件发送
    抽取思维(重构设计)
    不定长参数作用
  • 原文地址:https://www.cnblogs.com/ruanyifeng/p/4684262.html
Copyright © 2011-2022 走看看