作用域
作⽤域和作⽤域链的理解
作⽤域
- 在ES5中,全局是⼀个作⽤域,函数也会产⽣作⽤域。
- 在ES6中,代码块、let、const等都会有属于⾃⼰的作⽤域。
作⽤域链
- 当进⼊到⼀个执⾏上下⽂时,执⾏上下⽂会关联⼀个作⽤域链。
- 通常作⽤域链在解析时就被确定,作⽤域链与函数的定义位置有关,与它的调⽤位置⽆关
什么是变量提升、函数提升?
变量提升:
简单说就是在js代码执⾏前引擎会先进⾏预编译,预编译期间会将变量声明与函数声明提升⾄其对应作⽤域的最顶端,函数内声明的变量只会提升⾄该函数作⽤域最顶层。
当函数内部定义的⼀个变量与外部相同时,那么函数体内的这个变量就会被上升到最顶端。
举个例⼦,如:
console.log(a); // undefined var a = 3; // 会将var a 的声明提升⾄最顶端
函数提升
- 函数提升只会提升函数声明式写法,函数表达式的写法不存在函数提升。
- 函数提升的优先级⼤于变量提升的优先级,即函数提升在变量提升之上。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 CC_Blog!
评论