最近,我找到了这段代码,这是一种“发现问题所在并修改”的练习。目的是在不将message变量移到代码顶部的情况下使此代码正常工作,我很好奇如何实现这一目标。
function myMethod(cb) {
cb();
}
myMethod( () => console.log(message) );
const message = "My message";
答案 0 :(得分:1)
将const message
重新声明为var message
。这会将变量提升到范围的顶部。这是一篇有关此行为的好文章:
https://www.vojtechruzicka.com/javascript-hoisting-var-let-const-variables/
答案 1 :(得分:0)
我想到的第一件事是用var
关键字声明变量,然后程序不会引发错误,但仍然不会打印消息。您不能在不使用event loop的情况下将初始化过程放在文件顶部。
大约只有myMethod( () => console.log(message) )
被包围
在setTimeout函数中
setTimeout(() => {
myMethod( () => console.log(message) )
}, 0)
这样,函数的执行将被延迟,直到调用堆栈为空。然后它将使用当前值来执行该函数。