JavaScript的callback

翻译:http://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/
还没有翻译完

函数也是一种对象

在JS中,函数就是一种对象。它有对象应该有的所有操作:

  • 存在变量名中
  • 当作参数传到另一个函数中
  • 在函数中被创建
  • 在函数中被返回

所以,我们可以把函数当作变量传到另一个函数里,传进去之后执行甚至返回等待之后的执行。这就是callback函数的本质。

callback函数

callback函数的概念起源于函数式编程。在本质上,函数式编程定义了把函数用做参数。直到现在,大多数人还是认为函数式编程只是高级程序员才会用的。

callback函数是函数式编程中的一个主要概念。读完这篇文章你就懂了,并且发现实现callback函数就和把一个变量传入某个函数里一样简单。这个技术这么简单,以至于我没法理解它为什么出现在JS的高级教程里。

什么是callback函数或者high-order函数

callback函数就是被当作参数传入另一个函数的函数,并且传入之后在另一个函数中被执行。他们在jQuery和JS中随处可见。

//看!click函数中的参数不是普通的参数,而是一个函数!//那个函数就是callback函数
$("#btn_1").click(function() {
  alert("Btn 1 Clicked");
});

callback函数是怎么work的

当我们把一个callback函数当作采纳书传到另一个函数中,我们只是传入了函数的定义,而并没有执行这个函数。(因为我们当作参数传入函数的时候并没有在定义之后加上()符号,因为函数名后面加上括号才代表要执行它了)。

一个函数由于被传入了callback函数当作参数,他就可以随时执行这个传进来的callback函数。

callback函数其实是一个闭包,因此callback函数可以访问到包含它的函数的变量,甚至可以访问到全局变量。

实现callback函数的一些基本原则

使用不匿名函数还是匿名函数

一个匿名的callback函数的例子:

var friends = ["Mike", "Stacy", "Andy", "Rick"];
​
friends.forEach(function (eachName, index){
console.log(index + 1 + ". " + eachName); // 1. Mike, 2. Stacy, 3. Andy, 4. Rick​
});

一个是不匿名的callback函数的例子:

// global variable​var allUserData = [];
​
​// generic logStuff function that prints to console​function logStuff (userData) {
    if ( typeof userData === "string")
    {
        console.log(userData);
    }
    else if ( typeof userData === "object")
    {
        for (var item in userData) {
            console.log(item + ": " + userData[item]);
        }
​
    }
​
}
​
​// A function that takes two parameters, the last one a callback function​function getInput (options, callback) {
    allUserData.push (options);
    callback (options);
​
}
​
​// When we call the getInput function, we pass logStuff as a parameter.​// So logStuff will be the function that will called back (or executed) inside the getInput function​
getInput ({name:"Rich", speciality:"JavaScript"}, logStuff);
​//  name: Rich​// speciality: JavaScript

也可以给callback函数传入参数

无论是外部函数的数据,还是全局的数据都可以当作参数传给callback

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值