1、作用域
1、作用域是一个代码所在的区域,他是静态的(相对于上下文对象)在编写代码时就确定
2、分为:全局作用域和函数作用域,块级作用域(ES6)
3、作用:隔离变量,不同的作用域下同名变量不会冲突
2、作用域和执行上下文
区别
1、全局作用域外,每个函数都会创建自己的作用域,作用域在函数定义时就已经确定了,而不是在函数调用是
2、全局执行上下文环境是在全局作用域确定之后,js代码马上执行之前创建
3、作用域是静态的,只是函数定义好了就一直存在,且不会再变化
4、上下文环境是动态的,调用函数时创建,函数调用结束时上下文环境就会被释放
联系
1、上下文环境是从属于所在的作用域
2、全局上下文环境==》全局作用域
3、函数上下文环境==》对应的函数作用域
3、作用域链
1、多个上下级关系的作用域形成的链,它的方向是从下向上(从内到外)
2、查找变量时就是沿着作用域链查找的
查询规则
1、在当前作用域下的执行上下文查找对应的属性,如果有直接返回,或者进入2
2、在上一级作用域的执行上下文中查询对应的属性,如果有直接返回,或者进入3
3、再次执行2的相同的操作,直到全局作用域,如果还是没有找到就抛出找不到异常