在初始化之前使用变量。 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)
这样函数的执行会延迟到调用栈为空。然后它将使用当时设置的当前值执行函数。
最近我发现了这段代码,这是一个 "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)
这样函数的执行会延迟到调用栈为空。然后它将使用当时设置的当前值执行函数。