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

时间:2019-12-08 23:12:43

标签: javascript hoisting

最近,我找到了这段代码,这是一种“发现问题所在并修改”的练习。目的是在不将message变量移到代码顶部的情况下使此代码正常工作,我很好奇如何实现这一目标。

function myMethod(cb) {
    cb();
}

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

const message = "My message";

2 个答案:

答案 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)

这样,函数的执行将被延迟,直到调用堆栈为空。然后它将使用当前值来执行该函数。