饥人谷技术博客

关于JavaScript的作用域链

2018-09-05  本文已影响3人  柳岸花茗

1.什么是作用域?

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

2.局部作用域

image.png

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

3.全局作用域

image.png

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

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

4.作用域链

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


image.png

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

上一篇下一篇

猜你喜欢

热点阅读