为什么我不能得到一个 javascript 引起的提升

Why can't I get a javascript caused by hoisting

我正在努力解决提升问题,我正在学习代码学校教程 (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 来让它工作,但我需要在让它工作之前刹车)

你能帮我 fix/brake 代码吗,这样我就可以看到提升工作与预期结果不符。

这将是破解密码的一种方式:

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