gpt4 book ai didi

Javascript - 闭包和普通函数之间的区别

转载 作者:行者123 更新时间:2023-11-28 06:20:14 29 4
gpt4 key购买 nike

我是 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);
};

当我多次调用这个函数时,说 fade(1);fade(2);fade(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);
};

当我这样调用淡入淡出时:fade(1);fade(2);fade(3);执行几乎看起来像顺序执行,即首先执行 fade(1),然后按顺序执行其他执行。

这种行为的原因是什么,是因为闭包吗?如果是的话,您能解释一下当我向 top 函数引入闭包时发生了什么变化吗?任何有关此问题的帮助、要寻找的主题/概念将不胜感激。

最佳答案

您正在告诉 step 函数执行,而不是将其作为“非闭包”代码中的引用传递。尝试在 setTimeout() 调用中将 step() 更改为 step

关于Javascript - 闭包和普通函数之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35611713/

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