【JS重点06】作用域(面试重点)

作者 : admin 本文共704个字,预计阅读时间需要2分钟 发布时间: 2024-06-17 共1人阅读

目录

一:局部作用域

1 函数作用域

2 块作用域

二:全局作用域

三:作用域链

变量查找机制:


本文章目标:了解作用域对程序执行的影响及作用域链的查找机制

作用域:规定了变量能够被访问的”范围“,离开这个”范围“变量便不能被访问

一:局部作用域

局部作用域分为函数作用域和块作用域

1 函数作用域

在函数内部声明的变量,只能在函数内部被访问,外部无法直接访问。

  • 函数参数(形参)也是函数内部的局部变量
  • 函数执行完毕后,函数内部的变量实际被清空了(JS垃圾回收机制)

2 块作用域

在JS中使用{ }包含起来的代码称为代码块,代码块内部声明的变量外部大多数情况下无法被访问

  1. var声明变量
    1. 使用var声明的变量不会产生块作用域
  2. let与const
    1. let声明的变量与const声明的常量会产生块作用域
    2. 因为var声明的变量不会产生块作用域,会造成不必要的麻烦;例如双重for循环,同时声明循环变量,会造成解析错误;因此推荐使用let与const

二:全局作用域

标签内和.js文件的最外层就是所谓全局作用域,在全局作用域中声明的变量,在任何其他作用域内都可以被访问

注:

  1. 为window对象动态添加的属性默认也为全局,不推荐!
  2. 函数中未使用任何关键字声明的变量也为全局变量,十分不推荐
  3. 尽可能少的声明全局变量,防止全局变量被污染

三:作用域链

作用域链本质为变量查找机制

变量查找机制:

  1. 局部作用域被执行时,会优先查找当前局部作用域中的变量
  2. 如果当前局部作用域中查找不到,则会依次逐级查找父级作用域中变量,直到全局作用域。到最后没有找到变量,则会报错、
  3. 子级局部作用域被父级作用域套着,父级作用域又被全局作用域套着;父作用域访问不了子作用域
  4. 最终形成了作用域链,这也是变量查找机制的根本
本站无任何商业行为
个人在线分享 » 【JS重点06】作用域(面试重点)
E-->