【JS基础】作用域--一看就懂!!!

什么是作用域?什么是自由变量?

在这里插入图片描述
知识点:

  1. 作用域和自由变量
  2. 闭包
  3. This

在这里插入图片描述
作用域是什么?
其实它就是代表了一个变量或者说某个变量的合法的使用范围,比如说最外层的那个红框,let a=0,a可以在红框内的任何地方被使用;a1可以在第二个红框内的任何地方被使用;a2和a3同理。反例,比如说我想把a2放在红框外去使用就会报错。作用域就类似于这个红框,变量的一个合法使用范围,如果这个变量逃出这个范围去使用就会报错。

作用域分类:

  1. 全局作用域
    代码中,直接写一个变量,这个变量没有受到任何的约束,在任何地方都可以使用,比如window对象,document对象都可以……

  2. 函数作用域
    在函数中,可以看上图,函数作用域,变量只能在函数内使用,超过函数范围就会报错。

  3. 块级作用域(ES6新增)

在这里插入图片描述
比如说,在图中,什么叫块呢?比如说有if/for/while等后面有个大括号,大括号就叫做块。比如说我们在大括号定义了一个let x=100,如果是跑出大括号,跑出这个块去使用的话,会报错

自由变量:

  1. 一个变量在当前作用域没有定义,但被使用了
  2. 向上级作用域,一层一层依次寻找,直至找到为止
  3. 如果到全局作用域都没有找到,则报错xx is not defined

在这里插入图片描述 第一条:

  • 比如说最里边的红框内,a/a1/a2
    这三个都是自由变量,a3就不是,a3在当前作用域下定义为300,执行到fn3的时候呢,a没有定义,那怎么办呢?

第二条:

  • 向父级作用域寻找,找到了a2 =
    200,就不再找a2了,a2就等于200,再找a1,a1的时候呢,也是向上寻找,上一层没有,再上一层找到了a1 =
    100,就不再找了,a1就等于100,a也是,直到找到最外层a=0,就不再找了。

第三条:

  • 如果有一个变量向上找找不到的话,则未定义,则报错xx is not defined

猜你喜欢

转载自blog.csdn.net/weixin_43352901/article/details/107446640