setTimeout的运行机制与回调函数
console.log(1);
setTimeout(function(){
console.log(2)
},0) / /即便这个setTimeout的执行时间为0,还是放在最后执行;
console.log(3)
//执行顺序为:123
例二:
function add(x,y){
console.log(1);
setTimeout(function(){
console.log(2)
var ret=x+y
return ret
},1000)
console.log(3)
/ /到这里执行就结束了,不会等到前面的定时器,所以直接就返回了默认值undefined
}
console.log(add(10,20)) //输出为undefined
注意:凡是需要得到一个函数内部异步操作的结果:setTimeout、readFile、writeFile、ajax;这种情况必须通过回调函数
如下:
function add(x,y,callback){
console.log(1);
setTimeout(function(){
console.log(2)
var ret=x+y
callback(ret)
},1000)
console.log(3)
}
add(10,20,function(ret){
console.log(ret) //输出30
})
封装ajax的方法:
function get (url,callback){
var oReq= new XMLHttpRequest();
//当请求加载成功之后要调用指定的函数
oReq.onload=function(){
//现在需要得到这里的oReq.responseText
callback(oReq.responseText)
}
oReq.open('get',true)
oReq.send()
}
get ('data.json',function(data){
console.log(data)
})