乐趣区

js变量提升

Refer:
https://developer.mozilla.org/zh-CN/docs/Glossary/Hoisting
https://www.zhihu.com/question/19636194
https://developer.mozilla.org/zh-CN/docs/Glossary/Hoisting

感谢大牛们对知识的慷慨。参考了上面的三份文档,写一下自己对变量提升的总结。

what:Javascript 中执行上下文(特别是创建和执行阶段)工作方式的一种认识。how:变量和函数声明被从它们在代码流中出现的位置“移动”到代码的顶端。
不同的情况下 *** 声明 *** 的含义存在差别。

总结:

变量必须有创建并且初始化才能正常使用。MDN 上的“变量可以在声明之前进行初始化和使用”这句话适用于 var,不适用与 let var 变量提升了 num 的创建和初始化,把 num 初始化为 undefined let 变量提升了 num 的创建,但是没有提升初始化,所以抛出异常

提升是以作用域为单位的

var 提升

let 提升

const 提升

函数提升:函数声明会被提升,但是函数表达式不会 函数声明 函数表达式命名的函数表达式,函数标识符在外围作用域中也是不可用的

函数优先 函数会首先被提升,然后才是变量 后续的函数声明确实会覆盖前一个函数声明

把变量提升拆分三个部分:创建,初始化,赋值。对比如下:

如理解有误: 请帮忙指出,万分感谢!!!

退出移动版