您的位置:首页 > Web前端 > JavaScript

JavaScript 学习笔记十一 函数高级应用

2017-05-09 00:00 711 查看
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"));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: