搞懂JS中作用域和闭包的使用(上)(基本定义)

前言

什么是作用域?什么是闭包?这些都是前端面试中常考的问题,今天就来总结一下作用域和闭包的内容

作用域和自由变量

作用域:
作用域可以理解为某个变量合法的使用范围 ,如下图的函数,我给他加上了一层层的红框,每层定义的变量都有它自己的使用范围

在这里插入图片描述
作用域分为以下三种:

  1. 全局作用域
    代码中直接写一个变量,变量没有受到约束,在全局可以使用
  2. 函数作用域
    在函数中定义的变量,只能在函数中使用
  3. 块级作用域(ES6新增)
    在这里插入图片描述
    在 if(true)中定义的x变量,只能在里面使用,在外部会报错

自由变量:

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

闭包

作用域应用的特殊情况,有两种表现:

  1. 函数作为参数被传递
  2. 函数作为返回值被返回

来看两个例题:

在这里插入图片描述

答案是打印100
再看下面的:
在这里插入图片描述
打印的值还是100。

图一的函数执行是在全局作用域,a=200也在全局作用域。create函数里面的都是在函数作用域里面,所以打印a往上级作用域寻找就是a=100

图二同理,在fn函数中打印a,向上级作用域进行寻找,就是a=100

总结:
闭包:自由变量的查找,是在函数定义的地方,向上级作用域查找
不是在执行的地方!!!

this的赋值情况

this的使用:

  1. 作为普通函数
  2. 使用call apply bind
  3. 作为对象方法被调用
  4. 在class方法中调用
  5. 箭头函数

this取什么值是在函数执行的时候确认的,不是在定义的时候确认的
看下面的一些例子,this的使用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面的例子比较简单,加上注释,应该能看懂这六种this的使用情形

最后

这篇文章给大家介绍了作用域和闭包的基本概念,还介绍了this的几种使用情形,下篇文章会从几道面试真题入手,带大家进一步理解作用域和闭包的运用~

猜你喜欢

转载自blog.csdn.net/weixin_45745641/article/details/123829172
今日推荐