如果想要获取一个函数中的异步操作结果,必须通过回调函数来获取 例如想获取下面代码的data值:
function fn() { setTimeout(function() { var data = 'hello' },1000) }如果直接在函数下面使用如下代码:
console.log(data)由于setTimeout是异步操作,所以还没执行就先执行console.log(),因此结果为undefined。
如果把data定义在函数体外面
var data = 'hi' function fn() { setTimeout(function() { data = 'hello' },1000) } console.log(data)则也是没有执行setTimeout()就直接执行console.log(),输出结果为hi而非hello
回调函数的本质是获取异步操作的结果
function fn (callback) { //相当于 var callback = function (data) { console.log (data) } setTimeOut(function() { var data = 'hello' //这里的data是实参 callback (data) },1000) } //回调函数 fu(function (data) { //这里的data是形参 console.log (data) })