手记

关于JavaScript的作用域链

1.什么是作用域?

  作用域就是变量与函数的可访问范围,JavaScript的变量作用域有两个范围,全局作用域和局部作用域。在函数定义之外声明的变量是全局变量,它的值可以在整个程序中访问和修改。在函数定义内声明的变量是局部变量,每当执行函数时,都会创建和销毁该变量,并且无法通过函数之外的任何代码访问该变量。

2.局部作用域

image.png


  因为局部变量只作用于函数内,所以不同的函数可以使用相同名称的变量。局部变量在函数开始执行时创建,函数执行完成后局部变量会自动销毁。

3.全局作用域

image.png


全局变量有全局作用域,可以在任何地方进行使用。
如果变量在函数内部没有进行声明,那么该变量默认为时全局变量。
例如:

function partScope(){
n = "jirengu";  //n为全局变量
}

4.作用域链

  当查找一个变量的时候,会先从上下文的变量对象中查找,如果没有找到,就会从父级执行上下文的变量对象中查找,一直找到全局上下文的变量对象,也就是全局对象。这样由多个执行上下文的变量对象构成的链表叫做作用域链。


image.png


  函数在执行的过程中,先从自己内部找变量如果找不到,再从创建当前函数所在的作用域去找, 以此往上。注意找的是变量的当前的状态。



作者:柳岸花茗
链接:https://www.jianshu.com/p/61bca5d085dd


0人推荐
随时随地看视频
慕课网APP