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 提升
- 函数提升:函数声明会被提升,但是函数表达式不会
函数声明
函数表达式命名的函数表达式,函数标识符在外围作用域中也是不可用的
- 函数优先
函数会首先被提升,然后才是变量
后续的函数声明确实会覆盖前一个函数声明
- 把变量提升拆分三个部分:创建,初始化,赋值。对比如下:
如理解有误:请帮忙指出,万分感谢!!!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。