- 简单回调
function foo(a, b, c){
alert(a + "," + b + "," + c);
}
function doSomething(callback){
callback('one','two','three');
}
function test(){
doSomething(foo)
}
- 匿名函数回调
function doSomethingTwo(damsg, callback){
alert(damsg);
if(typeof callback == 'function'){
callback();
}
}
function test2(){
doSomethingTwo("callback function", function(){
alert("匿名函数回调");
});
}
- callback回调
function Thing(name){ //class
this.name = name;
}
//动态添加doSomethingThree方法
Thing.prototype.doSomethingThree = function (callback) {
callback.call(this); //在当前对象上调用回调函数
}
function foo(){
alert(this.name);
}
function testThree(){
var thing = new Thing("zhangsan");
thing.doSomethingThree(foo);
}
- apply回调
function ThingThree(name) {
this.name = name;
}
ThingThree.prototype.doSomethingThree = function(callback, param){
callback.apply(this, param);
}
function fooThree(param){
alert(param[1]);
}
function testFour(){
var thing = new ThingThree('aaa');
thing.doSomethingThree(fooThree,['a','b']);
}
var funcBody = 'alert("aaa")';
function testFive(){
var a = new Function("alert('aaaa')")
alert(typeof a);
a();
}
call与apply的区别在于用apply实现回调时,传入的参数必须为数字,而对于call方式没有限制。