异步处理不用阻塞来等待处理完成,而是允许后续操作,直至其程序将处理完成,并回调通知此函数
那么在js中有如下几种异步方式:
示例1
var async=function(callback){//read data
setTimeout(function(){
callback('data')
},1000)//1秒后回调
}
//使用
async(function(data){
alert(data)
})
示例2
var async=function(callback){var xhr=new XMLHttpRequest()
xhr.open('get','.',true)
xhr.onreadystatechange=function(){
callback(xhr.readyStatus)
}
xhr.send()
}
async(function(data){
alert(data)
})
示例3
var async=function(callback){var img=new Image()
img.onload=img.onerror=function(){
callback(img)
}
img.src='x.jpg'
}
async(function(data){
alert(data)
})
this关键字指向调用它的对象,test()是在GLOBAL中调用,而且异步函数回调应该形成了闭包,回调函数中的this也应该指向GLOBAL对象,而至于为啥this.vall是undefined,则是因为用var申明的变量都是局部变量,并不是GLOBAL变量的属性。好好去看看javascript中this关键字指的对象和闭包的概念吧。希望能帮到你