前置知识回调可以是同步也可以是异步,异步必须放在回调里执行,也就是对于一个异步任务只有回调函数里的才是异步的,比如:
<ul>
<li class="one">one</li>
<li class="two">two</li>
<li class="three">three</li>
</ul>
<script>
{
let view = {
el: 'ul',
selector: null,
init(){
this.$el = $(this.el)
}
}
let model = {
}
let controller = {
init(view, model){
this.view = view
this.model = model
this.view.init()
this.bindEvent()
},
find(){
return this.view.$el.find(this.selector)
},
bindEvent(){
this.selector = '.one'
this.find().on('click',(e)=>{
console.log(this.selector)
})
this.selector = '.two'
},
}
controller.init(view,model)
}
</script>
上面的事件监听是异步任务,但也只是它的回调里是异步的,所以this.find()的时候是同步的this.selector是'.one',而(e)=>{console.log(this.selector)}这个回调里才是异步代码,所以等页面中所有的同步代码完成后才去执行的,也就是这时候的this.selector是'.two',也就是点击one的时候打印出.two
回调
把一个函数A传给另一个函数B调用,那么A就是回调函数
1.具名回调写法
function 获取用户信息(fn){
fn.call(undefined,'姓名:王立发')
}
function 用户信息(信息){
console.log(信息)
}
获取用户信息.call(undefined,用户信息)
//姓名:王立发
2.匿名回调写法
function 获取用户信息(fn){
fn.call(undefined,'姓名:王立发')
}
获取用户信息.call(undefined,function(信息){
console.log(信息)
})