• 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 = {};
  • 相关阅读:
    判断一个字符串之中出现次数最多的字符和它出现的次数
    冒泡排序
    vue 页面生成图片保存
    css实现0.5像素的底边框。
    web之面试常问问题:如何实现水平垂直居中?
    cocos 向左滚动公告
    SpringBoot 访问jsp文件报错Path with "WEB-INF" or "META-INF": [WEB-INF/jsp/welcome.jsp]的解决办法
    vue 弹窗禁止底层滚动
    vue 倒计时 iOS无效
    axios之增删查改操作
  • 原文地址:https://www.cnblogs.com/ruanyifeng/p/4684262.html
Copyright © 2020-2023  润新知