JS作用域及其作用域链

作用域概述

通常来说,一段程序代码中所用到的名字不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。

全局作用域

作用于所有代码执行的环境(整个script标签内部)或者一个独立的js文件

局部作用域

作用于函数内的代码环境,就是局部作用域。因为跟函数有关系,所以也称为函数作用域。

块级作用域

块级作用域由{}包括,if语句和for语句里面的{}等

变量的作用域

根据作用域不同,变量分为三种全局变量 局部变量 块级变量

全局变量

函数外部let的变量,在任何区域都可以访问和修改

特殊情况

  • 局部变量或者块级变量没有let声明直接赋值的当全局变量看
  • 函数内部的形参可以当作局部变量看

局部变量

函数内部let的变量,只能在当前函数内部访问和修改

块级变量

{}内部的let变量,只能在块作用域里访问,不能跨函数访问

作用域链

JavaScript在执⾏过程中会创建一个个可执⾏上下⽂ (每个函数执行都会创建这么一个可执行上下文)
每个可执⾏上下⽂的词法环境都会对外部词法环境进行引⽤,可通过该引⽤来获取外部词法环境中的变量和声明等,
这些引⽤串联起来,⼀直指向全局的词法环境,形成一个链式结构,被称为作⽤域链

简而言之: 函数内部可以访问到函数外部作用域的变量, 而外部函数还可以访问到全局作用域的变量,这样的变量作用域访问的链式结构, 被称之为作用域链

posted @ 2022-07-27 20:57  fionna  阅读(80)  评论(0编辑  收藏  举报