闭包遇到问题

闭包会一直从外往内执行

const log = console.log.bind(console)
const f = function (c, callback) {
    log("c",c)
    return callback(r = "0")
}
const a = function (callback) {
    var c = "1"
    log("a")
    return f(c , callback)
}

const ff = function() {
    log("进入")
    a(()=> {
        return 567
        log("3")
    })
}

ff()
//进入 a  c 1

多层嵌套返回值

const cc = function() {
    return 123
}

const aa = function() {
    return cc()
}

aa()
//返回值123
const f = function ( callback) {
    return callback()
}
const a = function (callback) {
    return f(callback)
}

const ff = function() {
    return a(()=> {
        return 567
    })
}

ff()
//567

返回值支持多层嵌套 return返回的值传递  并且支持函数作为值传递


箭头函数很例外

const ccc = function() {

}
const aaa = function(rrr) {
     return ccc((rrr) => {
        return rrr()
     })
}


aaa(() => {
    return  1
})

//没有返回值
const ccc = function() {
 log("ccc")                //// ccc收到函数但是没有用这个收到的参数
}
const aaa = function(rrr) {
    log("aaa")
      ccc(() => {
         log("+ccc")
         rrr()  //此处两句皆为参数传给函数ccc()
     })
}


aaa(() => {
    log("1")
    return  1
})

//此乃失败案例
const ccc = function(rrr) {
    rrr()
 log("ccc")
}
const aaa = function(rrr) {
    log("aaa")
      ccc(() => {
         log("+ccc")
         rrr()
     })
}


aaa(() => {
    log("1")
    return  1
})

箭头函数坑

var c = (a, b) => {a+b}
undefined
c(1,2)
undefined
var d = (a, b) => a+b
undefined
d(1, 2)
3

在不添加大括号的时候箭头函数会默认return语句,加了大括号就正常

最后终于解决问题

const ccc = function(rrr) {
    return rrr()
}
const aaa = function(rrr) {
    return ccc(rrr)
}


var s = aaa(() => {
    log("11")
    return  1
})

 


继续深耕!发现是回调函数的坑 

回调函数就是一个参数,将这个函数作为参数传到另一个函数里面,当那个函数执行完之后,再执行传进去的这个函数。这个过程就叫做回调

posted @ 2019-10-27 22:23  容忍君  阅读(221)  评论(0)    收藏  举报