/* 一、回调函数 函数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 = {};