作用域

作用域 是一个变量合法使用的范围
全局作用域
最外层函数和最外层函数外面定义的变量 拥有全局作用域
所有未定直接使用的变量 拥有全局作用域
所有window 对象的属性 拥有全局作用域
弊端:过多的全局作用域变量会污染全局命名空间 ,会引起命名冲突。
函数作用域
函数作用域内部声明的变量,一般只有固定的代码片段才可以访问的到
作用域是分层的,内层作用域可以访问外层作用域,反之不行
块级作用域
ES6 中let 和 const 声明的变量是块级作用域 解决了ES5 中的两个问题
块级作用域可以在函数中创建,也可以在代码块中去创建({}包裹的代码片段)
let 和 const 声明的变量不会有变量提升 和重复声明。
在循环中 适合使用块级作用域 ,可以把声明的计数器变量限制在循环内部
 
作用域链
在当前的作用域中查找某个变量,但是没有,那么这个变量就是自由变量。如果自己作用域中找不到这个变量,就去父级作用域中找,依次向上级作用域中找,直到访问到window对象就停止 ,这一层层的关系就是作用域链。
 
作用:保证 对执行环境有权访问的所有变量和函数的有序访问,通过作用域链,可以访问到外层环境的变量和函数。
 
作用域链的本质是一个指向变量对象的指针列表 。变量对象是一个包含了执行环境中所有的变量和函数的对象。作用域链的前端始终都是当前执行上下文的变量对象。全局执行上下文的变量对象(全局对象)始终是作用域链的最后一个对象。
当查找一个变量时,如果当前的执行环境中没有找到,可以沿着作用域链向后查找。

posted @ 2022-03-30 22:13  LJMing68  阅读(52)  评论(0)    收藏  举报