对于javascript作用域的理解,之前整理过两篇文章:《javascript作用域和作用域链》《javascript的词法作用域》。最近读了周爱民老师的《javascript语言精髓》,对javascript作用域有了新的认识,特地整理下思路。
javascript的作用域广义来分:语法作用域和变量作用域。
javascript语法作用域
javascript语法作用域是讨论代码的组织结构上抽象,可以理解为讨论的是“圈地”问题,也有书籍中对纯粹的语法作用域称为“静态作用域”。
语法作用域分四级,下标依次增高
级别 | 作用域 |
---|---|
级别一 | 表达式 |
级别二 | 语句/批语句 |
级别三 | 函数 |
级别四 | 全局(宿主) |
- 同级别可以平行也可以相互嵌套(包含)
- 高级别可以嵌套(包含)低级别
- 低级别不可以嵌套(包含)高级别作用域;假如低级别嵌套高u别,可以理解成相互平行,例如下面的代码是完全等效的
if(true){
//
function fn(){
//
}
}
if(true){
//
}
function fn(){
//
}