setTimeout 多层回调函数嵌套的疑惑

发布于 2022-09-06 22:50:51 字数 700 浏览 18 评论 0

本人新手, 在学习javascript的异步时遇到了点疑虑, 如下:
在看阮一峰老师的教程里面有这样一段实例代码:

var async = function(arg, callback) {
    console.log(`参数为${arg}, 一秒后返回结果`)
    setTimeout(function() {
        callback(arg * 2)
    }, 1000)
}

async(1, function(value){
    async(value, function(value){
        async(value, function(value){
            console.log('完成: ', value)
        })
    })
})

输出结果如下:

clipboard.png

不是特别理解整个多层回调的运行机制, 貌似传进去的参数在每次执行setTimeout的时候都会被'记住', 但是该怎么理解这段代码, 总是感觉特别绕.

希望能有前辈能帮忙解答, 谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ゝ偶尔ゞ 2022-09-13 22:50:51

就是个回调的过程

var async = function(arg, callback) {
    console.log(`参数为${arg}, 一秒后返回结果`)
    setTimeout(function() {
        callback(arg * 2)
    }, 1000)
}

async(1, function(value){  //第一层延时1秒回调value为2
    async(value, function(value){ // 第二次将vaule = 2 作为参数再执行函数,延时一秒回调,此时value为4
        async(value, function(value){ // 第三次将vaule = 4 再次作为参数再执行函数,延时一秒回调,此时value为8 所以输出就为8
            console.log('完成: ', value)
        })
    })
})
大概就是这样,理理思路就能看懂,不难的
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文