我对 javascript 回调函数有一个担忧。我的理解是回调函数应该允许其他语句在需要时间时继续进行。所以我创建了一个自定义回调函数来检查,但我没有得到预期的结果。我在这里做错了什么吗?
function test(param1,param2,cb){
if(typeof(cb) === 'function') return cb(param1,param2)
else console.log('im not a func');
}
function calbackFunc(a,b){
console.log('Hi i am '+a+' '+b);
}
setTimeout(function timeout(){
console.log('timeout')
},0);
test('callback','function',calbackFunc);
console.log('console');
“你好,我是回调函数”
“安慰”
“超时”
根据回调函数,“控制台”应该排在第一位。但它没有发生。就像 setTimeout 工作正常。那么为什么我的自定义回调函数表现得像 setTimeout。
您在Stack和Queue之间感到困惑。
在javascript 中,同步调用进入堆栈,而异步调用进入堆,完成后返回队列。一个函数只有在它为空时才从队列移动到堆栈。
setTimeout()
这会将函数放入堆中,并且由于超时设置为 0,因此它立即移动到 _queue。这是否意味着它正在立即执行?不,因为您当前的功能(“主要”)尚未完成。
test()
这段代码是同步的!调用时test
我们将一个函数添加到堆栈中。然后我们将cb()
调用添加到堆栈中。这意味着我们需要完成所有这两项工作,然后才能进入第 3 阶段。
console.log
这里没什么好解释的
当前的“主堆栈已完成,因此队列中的函数现在已添加到堆栈中,记录'timeout'
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句