回調(diào)函數(shù)
回調(diào)函數(shù)(回調(diào))娱挨,當我們把某個函數(shù)作為參數(shù)傳遞給另一個函數(shù)的時候厘贼,這個函數(shù)就是回調(diào)函數(shù)
回調(diào)函數(shù)的基本寫法
<script>
function func (callBack){
// 處理其它操作
callBack();
}
function demo(){
console.log("這是一個回調(diào)函數(shù)");
}
func(demo);
</script>
demo01 this丟失
如果回調(diào)函數(shù)是某個對象的方法,而該對象方法中使用了this指針,那么該方法作為回調(diào)函數(shù)來使用的時候,需要注意this
001 提供一個對象,該對象中永遠showName方法
002 提供一個函數(shù),該函數(shù)接受一個參數(shù)(函數(shù)引用)
003 函數(shù)回調(diào)
<script>
// 把對象的方法作為函數(shù)的參數(shù)來進行傳遞
// this丟失的問題:函數(shù)的調(diào)用方式發(fā)生了改變
var obj = {
name : "hello",
age : 18,
showName : function(){
console.log(this.name);
},
showAge : function(){
console.log(this.age);
}
}
function demo(callBack){
callBack();
}
demo(obj.showName); // 空
demo(obj.showAge); //undefined
</script>
demo02 回調(diào)函數(shù)(解決this的問題)
<script>
var obj = {
name : "張空",
age : 18,
showName : function(){
console.log(this.name);
},
showAge : function(){
console.log(this.age);
}
}
function demo(callBack, callBack_obj){
callBack.call(callBack_obj);
}
demo(obj.showName, obj);
demo(obj.showAge, obj);
</script>
demo03 回調(diào)函數(shù)(兼容字符串方式)
<script>
var obj = {
name : "hello",
age : 18,
showName : function(){
console.log(this.name);
},
showAge : function(){
console.log(this.age);
}
}
function demo(callBack, callBack_obj){
if(typeof callBack == 'string')
{
callBack = callBack_obj[callBack];
}
if (typeof callBack == "function") {
callBack.call(callBack_obj);
}
}
console.log('==============')
demo(obj.showName, obj);
demo("showAge", obj);
</script>