var logs = function (str) { document.writeln(str + "<br>"); } //利用闭包,保存两个对象各自成员的值,避免两个对象的成员的值影响 var s = function () { var i = 0; return function () { return i++; } } var aa = s(); logs(aa()); //aa 对象返回 0 var ab = s(); logs(ab()); //ab 对象返回 0 logs(aa()); //aa 对象返回 1 logs(ab()); //ab 对象返回 1 var sdd = Base.extend({ constructor:function () { this.name = 'bb'; }, name:"sdd", age:10, getName:function () { return this.name; } }); var sddc = new sdd(); logs(sddc.getName()); //bb //匿名函数的高级应用 var mapped = [10, 2, 3].map(function (x) { return x * 2 }); logs(mapped); //20,4,6 [ {id:"item1"}, {id:"item2"}, {id:"item3"} ].map(function (current) { logs(current.id); // item1 item2 item3 }); // 柯里化 //柯里化就是预先将函数的某些参数传入,得到 //一个简单的函数,但是预先传入的参数被保存在闭包中,因此会有一些奇特的特性。 var adder = function (num) { return function (y) { return num + y; } } var inc = adder(1); //inc/dec 两个变量事实上是两个新的函数,可以通过括号来调用 var dec = adder(-1); logs(inc(99));// 100 ++1 logs(adder(1)(99)); logs(dec(99));//98 --1 logs(adder(-1)(99)); //eg...当请求从服务端返回后,我们需要更新一些特定的页面元素,也就是局部刷新的概 // 念。使用柯里化,则可以很大程度上美化我们的代码,使之更容易维护 function update(item) { return function (text) { $("div#" + item).html(text); } } //Ajax请求,当成功是调用参数callback function refresh(url, callback) { var params = { type:"echo", data:"dd" }; $.ajax({ type:"post", url:url, cache:false, async:true, dataType:"json", data:params, //当异步请求成功时调用 success: function(data,status){ callback(data); }, //当请求出现错误时调用 error: function(err){ logs("error : "+err); } }); } refresh("action.do?target=news", update("newsPanel"));