回調函數的定義是指函數作為參數在執行中進行值傳遞,搞清楚原理之前先明白兩件事
//1、基本類型值傳遞
//在函數接收基本類型值時,會在該函數內部棧中創建一個一模一樣的變量,且兩個參數互不影響,為了驗證這一正確性,如下
function fun(a) {
a = 666
console.log(a) //666
}
var num = 555
fun(num)
console.log(num) //555
//2、引用類型值傳遞
//當引用類型作為參數傳遞時,傳遞到函數內部的不是該參數的值,而是該參數在內存中的引用地址,這和引用類型的定義完全吻合。
//所以當其中一個參數修改時,另一個值的引用地址頁發生了改變。如下
function fun1(obj) {
obj.name = '王二'
obj.age = 20
console.log(obj)
}
var o = {
name: '張三',
age: 18
}
fun1(o)
console.log(o) //{name:'王二',age:20}
//以上兩個案例說明后,就不難理解回調函數了,function作為引用類型傳遞到目標函數中,當我們在目標函數中把參數作為function的入參傳過去時,
//我們在調用afun()時,就可以取到內部的結果了
function afun(are, callback) { //目標函數
are++
callback(are)
}
var d = 2
afun(d, function(res) {
console.log(res) //3
})