JavaScript 高级函数
日期: 2017-07-25 浏览量: 2681
高级函数是指满足下列条件之一的函数。
函数可以作为参数传递
函数可以作为返回值输出
函数作为参数传递
把函数作为参数传递,这代表我们可以抽离出一部分容易变化的业务逻辑。这样一来就可以分离业务代码中变化与不变的部分。其中一个重要的应用场景就是常见的回调函数。
回调函数:
在ajax异步请求应用中,回调函数的使用非常频繁。例如
var getUserInfo = function(userId , callback){
var url = 'http://xxx.com/getUserInfo?'+userId;
$.ajax(url , function(data){
if(typeof callback === "function"){
callback(data);
}
})
}
getUserInfo(123,function(data){
console.log(data);
})
Array.prototype.sort:
Array.prototype.sort 接受一个函数当做参数,这个函数里面封装了数组元素的排序规则。从Array.prototype.sort 的使用可以看到,我们的目的是对数组进行排序,这是不变的部分;使用什么规则去排序,则是可变的部分。把可变的部分封装在函数参数里面,动态传入 Array.prototype.sort.
[1,2,4,3].sort(function(a,b){
return a-b;
})
// 输出1234
函数作为返回值输出
相比把函数当作参数传递,函数当作返回值输出的应用场景也许更多,也更能体现函数式编程的巧妙。让函数继续返回一个可执行的函数,意味着运算过程是可延续的。
判断数据类型:
如果我们要判断一个数据是否是数组,在以往我们可以基于鸭子类型的概念去判断,比如判断这个数据有没有 length 属性,有没有 sort 方法 或者 slice 方法等。但更好的方式是用 Object.prototype.toString 来计算。Object.prototype.toString.call(Obj) 返回一个字符串,比如 Object.prototype.toString.call([1,3,4]) 总是返回 '[object Array]' ,而 Object.prototype.toString.call('123') 总是返回 "[object String]" . 所以我们可以写一个isType函数。
var isType = function(type){
return function(obj){
return Object.prototype.toString.call(obj) === "[object "+type+"]"
}
}
var isString = isType('String');
var isArray = isType('Array');
var isNumber = isType('Number');
isString('11111111'); //true
isNumber(11111); //true
isArray([1,2,3,4]); //true
我们还可以用for循环来批量注册这些 isType 函数:
var Type={};
for(var i=0,type=['Array','String','Number'];i<type.length;i++){
var t=type[i];
(function(t){
Type['is'+t]= function(obj){
return Object.prototype.toString.call(obj)==='[object '+t+']';
}
})(t)
}
Type.isString('11111'); //true
Type.isArray(1); //false
人活着,其实就是一种心态,你若觉得快乐,幸福无处不在;你为自己悲鸣,世界必将灰暗。
阅读排行
最新文章
联系方式
- 邮箱:m18811126599@163.com
- QQ:896956692