赞
踩
所谓的一等公民,其实就是普通函数,也就是说,函数其实就是没有什么特殊的,我们可以像对待其他数据类型一样对待函数。
1 可以把函数赋值给一个变量
var fn = function () {};
2 `也可以把函数存在数组里面
function fn(callback){
var a = 20;
return callback(20,30) + a;
}
function add(a,b){
return a + b;
}
fn(add);// 70
3 还可以作为另一个函数运行的返回值
function add(x){
var y = 20;
return function() {
return x + y;
}
}
var _add = add(100);
_add(); // 120
这些都是javascript的基本概念,但是很多人都无视这些概念。下面一个简单的例子来验证一下
首先自定义如下这样一个函数,要求在执行该函数之后,我们该怎么办,建议思考10s再往下看看。
function delay() {
console.log("5000s之后执行该函数");
}
有的人可能这样写
var timer = setTimerout(function() {
delay();
},5000)
实际上上面这种写法是很糟糕的
var timer = setTimeout(delay,5000);
当然,如果你是这么做的,那么恭喜你啊。
function getUser(path, callback){
return $.get(path, function(info){
return callback(info);
})
}
getUser('/api/user',function(resp){
console.log(resp);
})
在这个例子中,我们期望封装一个获取用户信息的函数,并期望在请求成功之后把需要处理的事情放在回调函数callback中来做,
下面一起来分析一下,先看看getUser这个方法内部的实现
$.get(path,function(info){
return callback(info);
})
看这一段代码,是不是和上面setTimerout的例子一模一样?callback函数被包裹在了一层没有意义的函数里面,因此第一步就是对其进行简化的。
$.get(path,callback)
function getUser(path,callback){
return $.get(path,callback);
}
但是其实再仔细观察,是不是有发现了同样的问题,$.get方法也同样被包裹在了一层没有意义的函数,因此再优化,则得到了如下结果。
var getUser = $.get;
是不是很神奇呢?
function add(a,b){
return a + b;
}
var other = add;
other(10,20); // 30;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。