JS-闭包、this

102 阅读2分钟

函数与方法

  • 函数function:独立的function,称之为函数
  • 方法method:当一个函数属于一个对象时,称这个函数为这个对象的方法

闭包

定义

狭义:JS中的一个函数,如果访问了外层作用域的变量,那么它就是一个闭包

性能查看

image.png

image.png

在内存中,闭包虽然没有被销毁,但是在其中的属性没有被使用,JS引擎会删除这些没有被使用的属性

this

全局作用域下指向

  • 浏览器:window(globalObject)
  • Node环境: {}

image.png image.png

上面这个图片就是Node的this指向{}的解释

this指向什么

  • this的绑定和定义的位置(编写的位置)没有关系
  • this的绑定和调用方式以及调用位置有关系
  • this是在运行时被绑定的

绑定规则

  • 默认绑定
  • 隐式绑定
  • 显示绑定
  • new绑定

默认绑定

  • 独立函数调用

独立函数调用可以理解成函数没有被绑定到某个对象上调用

隐式绑定

调用方式是通过某个对象进行调用的。也就是它的调用位置中,是通过某个对象发起的函数调用。

显示绑定

显示绑定优先级 > 默认绑定

  • apply
  • call
  • bind

apply

apply() 方法调用一个具有给定 this 值的函数,以及以一个数组(或一个类数组对象)的形式提供的参数。

apply(thisArg)
apply(thisArg, argsArray)

call

call()  方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。

function.call(thisArg, arg1, arg2, ...)

bind

bind()  方法创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用

function.bind(thisArg[, arg1[, arg2[, ...]]])

底层伪代码

image.png

小知识点

image.png

new绑定

详细说明

image.png

优先级

image.png

this规则之外

忽略显示绑定

显示绑定,传入一个null或者undefined,那么这个显示绑定会被忽略

image.png

间接函数引用

image.png

箭头函数

箭头函数不使用this的四种标准规则(也就是不绑定this),而是根据外层作用域来决定this

做题分析

1692842327988.png

左边是window的原因:定义对象{}没有产生作用域,只是一个对象而已,所以上层作用域是window

image.png

image.png

image.png

image.png


学习笔记随记,版权归coderWhy所有