回调函数原理:“我先睡会,醒了给你打电话”。这是一个异步的流程,“我睡觉”这个过程中(函数执行),“你”可以去做任何事,“睡醒了”(函数执行完毕)“打电话给你”(回调)进行之后的流程。
1、基本方法
<pre>function doSomething(cb) {
cb('param1', 'param2', 'param3');
}
function callback(a, b, c) {
console.log(a + ' ' + b + ' ' + c);
}
doSomething(callback);</pre>
2、匿名函数
<pre>function doSomethind(option, cb) {
console.log(option);
if(typeof cb == 'function') cb();
}
doSomethind('回调函数', function() {
console.log('result');
});</pre>
3、使用javascript的call方法
(1)基本用法
<pre>function person(name) {
this.name = name;
}
person.prototype.doSomething = function(cb) {
cb.call(this);
}
function callback() {
console.log(this.name);
}
var p = new person('Jack');
p.doSomething(callback);</pre>
(2)传入参数
<pre>function person(name) {
this.name = name;
}
person.prototype.doSomething = function(cb, params) {
cb.call(this, params);
}
function callback(params) {
console.log(params + ' ' + this.name);
}
var p = new person('Jack');
p.doSomething(callback, 'Hi');</pre>
4、使用 javascript 的 apply 传参数
<pre>function person(name) {
this.name = name;
}
person.prototype.doSomething = function(cb) {
cb.apply(this, [1, 2, 3, 'Hi']);
}
function callback(one, two, three, hi) {
console.log(one + ' ' + two + ' ' + three + ' ' + hi + ' ' + this.name);
}
var p = new person('Jack');
p.doSomething(callback);</pre>
网友评论