js系列十七:函数是一等公民

版权声明:版权归作者所有 https://blog.csdn.net/qq_36772866/article/details/88319284

所谓的一等公民,其实就是普通函数,也就是说,函数其实就是没有什么特殊的,我们可以像对待其他数据类型一样对待函数。
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;

猜你喜欢

转载自blog.csdn.net/qq_36772866/article/details/88319284