在初始化之前使用变量。 JS

Using variable before initialization. JS

最近我发现了这段代码,这是一个 "find what is wrong and modify" 类型的练习。目的是使这段代码在不移动代码顶部的消息变量的情况下工作,我很好奇如何实现这一点。

function myMethod(cb) {
    cb();
}

myMethod( () => console.log(message) );

const message = "My message";

const message 重新声明为 var message。这会将变量提升到范围的顶部。这是一篇关于此行为的好文章: https://www.vojtechruzicka.com/javascript-hoisting-var-let-const-variables/

我首先想到的是用 var 关键字声明变量,然后程序不会抛出错误但仍然不会打印消息。如果不使用 event loop.

,您永远无法将初始化带到文件顶部

显然唯一的办法就是包围 myMethod( () => console.log(message) ) 在 setTimeout 函数中

setTimeout(() => {
  myMethod( () => console.log(message) )
}, 0)

这样函数的执行会延迟到调用栈为空。然后它将使用当时设置的当前值执行函数。