gpt4 book ai didi

javascript - 为什么我无法获取由于提升而导致的 javascript

转载 作者:行者123 更新时间:2023-12-03 07:09:47 25 4
gpt4 key购买 nike

我正在尝试解决提升问题,我正在学习代码学校教程(es2015),但我似乎无法让他们的代码工作。 (它们仅显示部分代码,因此以下是我的版本)

function _myfunc(callback){
callback();
}

function display(names){
for(var i in names){
_mfunc(function(){
console.log(names[i]);
});
}
}
display(["Sam", "Tyler", "brook", "alex"]);

显然 var i 被提升到 for 循环之上,我应该在控制台中看到的是 alex 被控制台四次。但我看到这四个名字都得到了安慰。 (然后我打算使用 let 而不是 var 来让它工作,但我需要在让它工作之前制动它)

你能帮我修复/中断代码,以便我可以看到提升对预期结果的影响。

最佳答案

这将是破坏代码的一种方法:

function display(names){
for(var i in names){
setTimeout(function() {
console.log(names[i]);
}, 0);
}
}
display(["Sam", "Tyler", "brook", "alex"]);

这里发生的情况是,传递给 setTimeout 的回调函数被安排在循环完成后运行。一旦它们都捕获了 i 变量(该变量在循环末尾具有值 3) - 它们都会输出相同的内容。

PS:我建议不要使用 for-in 来迭代数组,而是使用普通的 for 和计数器。

关于javascript - 为什么我无法获取由于提升而导致的 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36658659/

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