最近,我找到了这段代码,这是一种“发现问题所在并修改”的练习。目的是在不将message变量移到代码顶部的情况下使此代码正常工作,我很好奇如何实现这一目标。
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)
这样,函数的执行将被延迟,直到调用堆栈为空。然后它将用当前值执行函数,然后将其设置。