作用域
1、什么是作用域?
- 作用域是一套规则,这套规则定义了函数或变量的访问权限,决定了它们各自的行为
- 全局作用域:即script标签之间的内容就是全局作用域
- 局部作用域:可以简单的看成是函数{}之间的内容
- 全局作用域包含局部作用域,函数中可以包含另一个函数,即局部作用域可以包含另一个局部作用域
- 在各自的作用域声明的函数或者变量都保存在各自的作用域之中
- 对于局部作用域而言,当执行流进入函数,也就是函数调用时,就会创建一个局部作用域,里面的函数、变量也会被创建,而当函数运行完成,作用域就会被销毁,即作用域内部的变量及函数都会被销毁
- 全局作用域只有在页面关闭时才会被销毁,也就是在页面关闭之前,保存在全局作用域中的变量域函数会一直存在
2、这套规则是什么样的呢?
在此之前首先我们需要了解LSH与RSH
LSH:
查找某个变量的容器,例如:
`var a = 2;`
在声明时:遇到var a 编译器会询问作用域中是否含有这个变量,如果有则忽略此句声明语句,继续编译,如果没有找到,则在当前作用域集合中声明该变量命名为a
当运行时:编译器为js引擎生成运行的代码,当遇到语句a = 2时,
会先去当前作用域中查找是否有该变量,如果有,则拿来使用,如果没有则会继续向父级作用域询问,直至全局作用域仍没有找到就会抛出一个异常
查找某个变量的容器就可以成为LSH
RSH:
即查找某个变量的值,即var a = 2;这个2即为RSH
作用域链
高程中的定义是: 保证执行环境对有权访问的所有变量的有序访问
局部作用域可以向上访问它的父级作用域,反之则不行,当需要一个变量时,它会先在自身寻找,如果没有则访问父级作用域,直至全局作用域,没有找到即抛出异常,这种解构即为作用域链
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。