‘提升’是 JS 开发都经常接触的一个术语,如果你刚接触 JS,可能会遇到一些奇怪的行为,其中一些变量是随机undefined,会抛出ReferenceErrors 异常等等。提升通常被解释为将变量和函数放到作用域顶部,但实际上并不是这样,尽管行为看起来是这样的。
当 JS 引擎获取我们的代码时,它要做的第一件事就是为代码中的数据设置内存。 目前还没有执行任何代码,只是准备要执行的所有内容。 函数声明和变量的存储方式不同。 函数是以按保存函数的引用的方式来存储。
1.函数是以按保存函数的引用的方式来存储(Functions are stored with a reference to the entire function)

当引擎通过我们实际声明变量的那一行时,内存中的值会被我们实际声明的值覆盖。
总结
- 在执行代码之前,函数和变量存储在内存中,用于执行上下文,这就是所谓的提升。
- 函数存储为对整个函数的引用,用
var关键字声明的变量默认值为undefined,用let和const关键字声明变量默认存储值为uninitialized。