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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部