扫码关注微信公众号

回复“面试手册”,获取本站PDF版

回复“简历”,获取高质量简历模板

回复“加群”,加入程序员交流群

回复“电子书”,获取程序员类电子书

当前位置: 前端 > javascript高频面试题 > 15.如何理解作用域与作用域链?

作用域:代码中定义变量的区域,一段程序代码中所用到的变量并不总是有效的,而限定这个变量的可用性的代码范围就是这个变量的作用域。JavaScript中使用的作用域是静态作用域,特点就是变量的作用域在变量定义时确定。

作用域分为:全局作用域,函数作用域,块级作用域

(1)全局作用域:全局作用域是最外围的一个作用域,浏览器中,全局作用域就是window对象,node则是global对象。

  • window(global)下的属性或者方法
  • 最外层的变量或者函数
  • 未定义直接赋值的变量

(2)函数作用域

  • 定义在函数中的变量就处于函数作用域中,同函数作用域中,变量不能相互访问
  • 里面可以访问外面的作用域,但是外面不能访问里面的作用域

(3)块级作用域

  • 使用ES6中新增的let和const指令可以声明块级作用域,块级作用域可以在函数中创建也可以在一个代码块中的创建(由{ }包裹的代码片段)
  • let和const声明的变量不会有变量提升,也不可以重复声明

作用域链: 在当前作用域中查找所需变量,但是该作用域没有这个变量,那这个变量就是自由变量。如果在自己作用域找不到该变量就去父级作用域查找,依次向上级作用域查找,直到访问到window对象就被终止,这一层层的关系就是作用域链。作用域链的作用是保证对执行环境有权访问的所有变量和函数的有序访问,通过作用域链,可以访问到外层环境的变量和函数。


点击面试手册,获取本站面试手册PDF完整版