gpt4 book ai didi

javascript - 理解回调和相关的词法范围

转载 作者:行者123 更新时间:2023-11-30 08:32:13 25 4
gpt4 key购买 nike

我试图通过 setTimeout 函数理解回调。我有两套代码:

for (var i = 1; i <= 10; i++) {
(function(callback,i){
setTimeout(function(){
callback(i)
}, 0);
})(function(val){console.log(val)},i);

它可以很好地打印 1,2,3,.... 10

但是当我尝试将setTimeout 的回调函数抽象为:

for (var i = 1; i <= 10; i++) {
(function(callback,i){
setTimeout(func, 0);
})(function(val){console.log(val)},i);
}
function func(){
callback(i)
}

它给我错误说明

Uncaught ReferenceError: callback is not defined

我知道 func 函数声明的词法范围存在一些问题。但无法理解原因。请帮助我理解这一点。

最佳答案

它会抛出引用错误,因为函数 func 有一个作用域,其中没有 callback 的声明。您可以通过将回调作为参数传递给 func 来修复它。

for (var i = 1; i <= 10; i++) {
(function(callback, i) {
setTimeout(func, 0, callback.bind(null, i)); //Pass the callback here as a parameter to func.
//(setTimeout can pass its >2 parameter as
//its callback parameter)
})(function(val) {
console.log(val)
}, i);
}

function func(callback) { //receive the callback here and use it.
callback();
}

关于javascript - 理解回调和相关的词法范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35954532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com