js高阶-函数闭包this

news2025/1/8 5:34:36

闭包

一等公民

在js中函数是一等公民
函数使用很灵活,可以作为参数,也可以作为返回值

高阶函数

函数接收函数作为参数或者返回函数,则该函数称为高阶函数
eg:
array.filter/reduce/find/findIndex/map.forEach

函数与方法

独立使用的 Function
做为对象的属性 method

What

函数+自由变量
一个函数访问了外层作用域的变量,这种函数+外层变量的组合就是闭包

闭包的内存泄漏

闭包函数的父级作用域指向定义时函数的ao对象,ao对象就不会被销毁
这样的ao对象多了,造成内存泄漏
解决 fn=null

如果ao对象中有一个属性一直没有用到,这个属性会被销毁吗??
js引擎优化,删掉
在这里插入图片描述
在这里插入图片描述

this指向

java中的this ,一般用在类中的方法中,this指向当前的调用对象

全局作用域

浏览器环境下 this指向window
node 环境下 this指向{}
文件当作模块->加载->编译->放入一个函数fn
执行fn.apply({},…)
因此this指向{}

函数作用域

运行到函数代码执行,

  1. 先创建函数的变量对象AO
    变量/函数的声明
  2. 然后创建函数执行上下文
    函数执行上下文中有
    VO:AO
    作用域链:AO+父级的变量对象(编译期决定了)
    this:由函数的调用决定
  3. 函数执行上下文入栈

不同的函数调用方式this指向不同

  1. 全局调用
  2. 作为对象的方法调用
  3. call/apply/bind调用
    在这里插入图片描述

this 的绑定规则

默认绑定

函数没有调用者,独立函数调用
指向全局window
在这里插入图片描述

隐式绑定

函数有调用者,作为对象的方法调用
指向调用者
在这里插入图片描述

显式绑定

使用call,appy,bind等函数 显式指定this的指向

在这里插入图片描述

new 绑定

new Foo()

  1. 创建一个空对象
  2. 将Foo()函数内部的this指向这个空对象
  3. 执行Foo函数
  4. Foo默认返回this也就是这个执行后的空对象

规则之外

call,apply,bind 如果传入undefined,null
this指向window
(obj.bar = obj.fn)()指向window??实际报错

内置函数的this

  1. 内置api,setTimeout 等 指向全局window
  2. 监听事件,boxDiv.addEventListner(‘click’,fn) 指向boxDiv
  3. js数组的方法 map/reduce/filter 指向window

箭头函数的this

箭头函数简写

  1. 只有一个参数
    a=>{}
  2. 只有一条函数语句,默认return
    ()=>arg=5
  3. 只有一条函数语句,但是是语句是对象
    ()=>({a:4})

箭头函数

this

常见的this绑定规则失效,没有自己的this,this指向上层作用域中的this

arguments类数组对象

arguments的特点

  1. 可以迭代,arguments[idx]
  2. argums.length
  3. 是对象 , 没有数组的方法
    普通函数的arguments,默认存在在ao对象中,用于收集函数的参数
    箭头函数没有arguments对象来收集函数的参数,...args 剩余参数语法来收集参数

如何将类数组对象转化成数组对象

  1. 遍历,将每一个元素push进newArr
  2. Array.prototype.slice.call()
  3. Array.from()

绑定规则的优先级

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

在这里插入图片描述

函数式编程

纯函数

条件:

  1. 相同的输入,确定相同的输出
  2. 不会产生函数副作用,例如一些触发事件,函数执行后修改外部状态等等
    例如slice与splice,splice会修改原数组,不是纯函数

柯里化函数

一个函数接收多个参数
变成多个函数的组合来接收参数
具体实现过程:通过在函数内部return一个函数
这个过程称之为柯里化
作用

  1. 使得函数的职责单一
  2. 复用函数逻辑

组合函数

当我们需要对一个数据进行函数的调用,会依次执行两个函数
如果每次都执行这两个函数的调用,操作重复
是否有一种方法,将这两个函数组合起来,自动依次调用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2273024.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu 24.04.1 LTS nginx配置maccms

之前在Ubuntu 20.04中搭建过,现在换了新操作系统,顺便整理一下。 相关文章 《Ubuntu 20.04.1 LTS搭建nginx php7.4运行环境》 https://blog.csdn.net/lxyoucan/article/details/144850572《linux nginx maccms管理后台无法进入页面不存在和验证码不显…

【Ubuntu】想知道怎么通过命令行查看笔记本电池健康程度吗?

你想在 Ubuntu 中通过命令行检查电池健康状态,而不需要额外安装任何工具吗? 其实,你可以做到。 大多数在笔记本电脑上使用 Ubuntu 的用户都会通过顶部栏来监控电池电量(我总是在顶部栏启用电池百分比显示,以便一目了…

ue5动画重定向,一键重定向。ue4小白人替换成ue5

这就是我们下载的 初学者动画内容包 点击设置选中列 绿色的是动画 黄色的关卡 蓝色是蓝图 ctrla 全选 ctrl鼠标左键 选中所有动画 重定向动画资产 不要选错,只要绿色 选择目标网格体 选择所有的绿色 动画 导出动画 添加前缀ycn 导出 一定要提前新建好存放的…

05容器篇(D2_集合 - D6_容器源码分析篇 - D1_ArrayList)

目录 本章目标 一、基本介绍 二、原理分析 1. 数据结构源码分析 2. 默认容量&最大容量 为什么最大容量要-8呢? 3. 为什么ArrayList查询快,增删慢? 4. 初始化容量 1> 创建ArrayList对象分析:无参数 2> 创建Arra…

TVbox 手机、智能电视节目一网打尽

文章目录 一、简要介绍二、下载地址 一、简要介绍 TVbox是目前最火爆的多端、多源的电视影音工具,是一款开源的自定义添加站源的影音工具。TVBox,支持电视频道直播。一款TV端影视工具,软件本身不具有任何影视资源,但可以通过配置…

IP Anycast 与 CDN

基于名字寻址而不是基于地址寻址早就不是什么新鲜事,我们日常生活中的寻址基本都是找名字,比如找厕所,找连锁店,我们倾向于去具有同样称呼的最近那家。IP 网络中的这种机制叫 Anycast。 是不是一下子就不需要过多解释了。所有具有…

【0x006D】HCI_Write_LE_Host_Support命令详解

目录 一、命令概述 二、命令格式及参数说明 2.1. HCI_Write_LE_Host_Support命令格式 2.2. LE_Supported_Host 三、生成事件及参数 3.1. HCI_Command_Complete 事件 3.2. Status 四、命令执行流程 4.1. 命令发起阶段(主机端) 4.2. 命令处理阶段…

Harmony OS开发之ArkUI框架速成九弹性布局和层叠布局

> 程序员Feri一名12年的程序员,做过开发带过团队创过业,擅长Java相关开发、鸿蒙开发、人工智能等,专注于程序员搞钱那点儿事,希望在搞钱的路上有你相伴!君志所向,一往无前! --- 1.弹性布局(Flex) 弹性布局分为单行布局和多行…

HarmonyOS-面试资料

1. HarmonyOS-面试资料 1.1. HarmonyOS 优点、特点 1.1.1. 优点 (1)在国家方面,是国产的系统,受国家支持不会有限制的情况。   (2)设备互连18N(1:手机 8:平板、PC、vr设备、可穿戴设备、智慧…

macos安装java8

下载 dmg方式安装 安装 双击pkg运行 输入java -version验证 配置环境变量 cd ~ ls -a输入 ls -a后查看是否已经存在.bash_profile文件,如果已经存在就不需要创建,如果不存在,继续执行下方命令创建文件 touch .bash_profile /usr/l…

记一次k8s下容器启动失败,容器无日志问题排查

问题 背景 本地开发时&#xff0c;某应用增加logback-spring.xml配置文件&#xff0c;加入必要的依赖&#xff1a; <dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>8…

KAFKA入门:原理架构解析

文章目录 一、认识kafka二、架构介绍2.1 工作流程2.2 Kafka可靠性保证2.3 Kafka存储 一、认识kafka Kafka到底是个啥&#xff1f;用来干嘛的&#xff1f; 官方定义如下&#xff1a; Kafka is used for building real-time data pipelines and streaming apps. It is horizont…

Redis - 6 ( 9000 字 Redis 入门级教程 )

一&#xff1a;Redis Java 集成到 Spring Boot 1.1 使用 Spring Boot 连接 Redis 单机 在创建项目时&#xff0c;勾选 NoSQL 分类下的 Spring Data Redis&#xff0c;同时勾选 Web 分类下的 Spring Web。这样既能方便集成 Redis&#xff0c;又能通过 Web 接口进行后续测试&am…

笔记本如何录屏幕视频和声音?快速入门的两种方法

“你好&#xff01;我想要制作线上教学课程&#xff0c;包括录制课程内容和我的声音&#xff0c;然后分享给我的学生&#xff0c;以便他们课后复习&#xff0c;但我不知道笔记本如何录屏幕视频和声音&#xff1f;有没有好的工具推荐&#xff1f;” 随着远程办公、在线学习和直播…

Flutter中的网络请求图片存储为缓存,与定制删除本地缓存

Flutter中的网络请求图片存储为缓存&#xff0c;与定制删除本地缓存 1&#xff1a;封装请求图片函数 2&#xff1a;访问的图片都会转为本地缓存&#xff0c;当相同的请求url&#xff0c;会在本地调用图片 3&#xff1a;本地缓存管理【windows与andriod已经测试】【有页面】【有…

Android设备使用AOA协议进行主机与配件模式通信

1.使用TYPC-C数据线连接两台华为手机&#xff1a; TYPE-C线&#xff0c;先连接下图右边的ACCESSORY 再连接左边的HOST 此时左边的HOST(白色) 会给右边的ACCESSORY(黑色) 充电 接着打开左连接的HostChart会自动调起授权&#xff0c;然后会启动右边的AccessoryChart USB HOS…

机器学习基础-支持向量机SVM

目录 基本概念和定义 1. 超平面&#xff08;Hyperplane&#xff09; 2. 支持向量&#xff08;Support Vectors&#xff09; 3. 线性可分 4. 边界 SVM算法基本思想和分类 基本思想 间隔最大化 间隔&#xff08;Margin&#xff09; 软边距 SVM 核函数的概念 基本概念…

ubuntu开机启动服务

需求背景&#xff1a; 需要监控日志&#xff0c;每次都是手动启动 nohup ./prometheus >/dev/null & nohub ./node_exporter >/dev/null & 需求目标&#xff1a; 重启后系统自动启动服务

图漾相机基础操作

1.客户端概述 1.1 简介 PercipioViewer是图漾基于Percipio Camport SDK开发的一款看图软件&#xff0c;可实时预览相机输出的深度图、彩色图、IR红外图和点云图,并保存对应数据&#xff0c;还支持查看设备基础信息&#xff0c;在线修改gain、曝光等各种调节相机成像的参数功能…

【计算机网络】课程 实验二 交换机基本配置和VLAN 间路由实现

实验二 交换机基本配置和VLAN 间路由实现 一、实验目的 1&#xff0e;了解交换机的管理方式。 2&#xff0e;掌握通过Console接口对交换机进行配置的方法。 3&#xff0e;掌握交换机命令行各种模式的区别&#xff0c;能够使用各种帮助信息以及命令进行基本的配置。 4&…