这是我参与8月更文挑战的第27天,活动详情查看:8月更文挑战 !
作用域
变量与函数的作用范围
分类:
- 全局作用域
- 函数外定义的变量拥有全局作用域
- 所有window对象上的属性拥有全局作用域
- 没有声明在任何函数内部的函数拥有全局作用域
var type = "a";
// 函数外可拿到type变量
function myFunction() {
// 函数内也可拿到type变量
}
- 局部作用域
在函数内部就是局部作用域,只在函数的内部起作用
function myFunction() {
var type = "a";//只能在函数内部拿到type变量,函数外部拿不到
}
-
块级作用域
ECMAScript6中新增了块级作用域,let声明的变量只能在块级作用域里访问,会形成暂时性死区(声明前不可用),不能跨块访问,也不能跨函数访问,无变量提升,不可以重复声明
特点:
- 通过let和const声明,所声明的变量在指定块的作用域外无法被访问
- 在函数内部创建,在代码块内部{}起作用
- 特点:声明变量不会提升到代码块顶部,禁止重复声明
- const是只读的特性,声明的过程中就必须赋值
- const在声明过后不可修改
作用域链
当在内部函数中,需要访问一个变量的时候,首先会访问函数本身的变量对象,是否有这个变量,如果没有,那么会继续沿作用域链往上查找,直到全局作用域。这么一个查找过程形成的链条就叫做作用域链
作用域和执行上下文区别:
-
作用域是静态的,只要函数定义好了就一直存在,并且不再发生变化。 执行上下文时动态的,调用函数时创建,调用结束后就会自动释放。
-
执行上下文对象是从属于所在的作用域。全局上下文环境==>全局作用域,函数上下文环境==>对应的函数作用域