当前位置:   article > 正文

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

js 函数是一等公民

所谓的一等公民,其实就是普通函数,也就是说,函数其实就是没有什么特殊的,我们可以像对待其他数据类型一样对待函数。
1 可以把函数赋值给一个变量


    var fn = function () {};

  • 1
  • 2
  • 3

2 `也可以把函数存在数组里面


    function fn(callback){
		var a = 20;
		return callback(20,30) + a;
	}
 function add(a,b){
	return a + b;
}
fn(add);// 70
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述
3 还可以作为另一个函数运行的返回值

function add(x){
	var y = 20;
	return function() {
		return x + y;
	}
}
var _add = add(100);
_add(); // 120
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述
这些都是javascript的基本概念,但是很多人都无视这些概念。下面一个简单的例子来验证一下
首先自定义如下这样一个函数,要求在执行该函数之后,我们该怎么办,建议思考10s再往下看看。

function delay() {
	console.log("5000s之后执行该函数");
}

  • 1
  • 2
  • 3
  • 4

有的人可能这样写

var timer = setTimerout(function() {
	delay();
},5000)
  • 1
  • 2
  • 3

实际上上面这种写法是很糟糕的

var timer = setTimeout(delay,5000);
  • 1

当然,如果你是这么做的,那么恭喜你啊。

function getUser(path, callback){
	return $.get(path, function(info){
		return callback(info);
	})
}
getUser('/api/user',function(resp){
	console.log(resp);
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这个例子中,我们期望封装一个获取用户信息的函数,并期望在请求成功之后把需要处理的事情放在回调函数callback中来做,
下面一起来分析一下,先看看getUser这个方法内部的实现

$.get(path,function(info){
	return callback(info);
})
  • 1
  • 2
  • 3

看这一段代码,是不是和上面setTimerout的例子一模一样?callback函数被包裹在了一层没有意义的函数里面,因此第一步就是对其进行简化的。

$.get(path,callback)
  • 1
function getUser(path,callback){
	return $.get(path,callback);
}
  • 1
  • 2
  • 3

但是其实再仔细观察,是不是有发现了同样的问题,$.get方法也同样被包裹在了一层没有意义的函数,因此再优化,则得到了如下结果。

var getUser = $.get;
  • 1

是不是很神奇呢?

function add(a,b){
	return a + b;
}
var other = add;
other(10,20); // 30;
  • 1
  • 2
  • 3
  • 4
  • 5
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/685942
推荐阅读
相关标签
  

闽ICP备14008679号