前言:
本篇文章向大家分享一下作用域和作用域链,希望对大家有所帮助!
作用域:
作用域就是代码的执行环境,全局执行环境就是全局作用域,函数的执行环境就是函数作用域(私有作用域),他们都是栈内存。全局执行环境是最外围的执行环境,根据ECMAScript所实现的宿主环境不同,表示的执行环境的对象也不同。
在Web浏览器中,全局执行环境被认为是Window对象,因此所有全局变量和函数都是作为Window对象的属性和方法创建的。在Node环境中,全局执行环境是global对象。
某个环境执行完毕完所有的代码以后,该环境就会被销毁,内部的变量和函数也都会被销毁,但是全局执行环境会等到程序退出的时候才会被销毁。每个环境都有自己的执行环境,当执行流入一个函数的时候,函数的环境就会被推入一个环境栈中,当函数执行完毕以后,环境弹栈,将控制权返回给之前的环境。
- 私有作用域;函数内部的环境
- 全局作用域:页面加载时候形成
- 私有变量:私有作用域的变量
- 全局变量:在全局作用域中形成的变量
作用域链:
代码在一个环境中执行的时候,会创建变量对象的一个作用域链,用于保证对执行环境有权访问的所有变量和函数有序访问,作用域链前端始终都是当前执行的代码所在环境的变量对象。
可以理解为一个链子连着一个个的作用域,当前执行环境的作用域在最前边,然后我们如果查找一个变量的时候,就会一个一个作用域的向上查找,最终到达全局作用域,如果还没有,就报错。
感谢观看,有任何问题可以评论区评论!