我是Javascript的新手,我一直在浏览一个视频,其中我使用下面的闭包找到了对淡入淡出函数的引用(修改为包含更少的代码)。
function fade(id) {
var dom = id, level = 1;
console.log(dom + ' : ' + level);
function step() {
var h = level.toString(16);
dom = dom + h;
if (level < 5) {
console.log('level '+ id + ' = '+level);
level +=1;
setTimeout(step,100);
}
}; setTimeout(step,100);
};
当我多次调用此函数时,淡入淡出(1);淡入淡出(2);淡入淡出(3);在浏览器控制台中,我看到执行是并行的,即所有三个函数调用都在同时执行。由于控制台中的日志语句,我认为它是并行的。
然后我将步骤声明为淡入淡出函数范围之外的函数,并从淡入淡出调用此函数:
function step(dom, level) {
var h = level.toString(16);
dom = dom + h;
if (level < 5) {
console.log('level '+ dom + ' = '+level);
level +=1;
setTimeout(step(dom,level),100);
}
};
function fade(id) {
var dom = id, level = 1;
console.log(dom + ' : ' + level);
setTimeout(step(dom,level),100);
};
当我这样称为淡入淡出时:淡化(1);淡化(2);淡化(3);执行几乎看似顺序,即淡入淡出(1)先执行,然后按顺序执行。
这种行为的原因是什么,是因为关闭,如果是这样,请你解释一下当我将闭包引入顶层函数时会发生什么变化?任何关于这个,帮助的主题/概念的帮助将非常感激。
答案 0 :(得分:0)
您告诉step
函数执行而不是将其作为'非闭包'代码中的引用传递。尝试在step()
来电
step
更改为setTimeout()