面试-JS基础知识-作用域和闭包、this

news/2024/9/19 15:42:36/文章来源:https://www.cnblogs.com/gardenOfCicy/p/18408181
  • 函数作为返回值
function create(){const a = 100return function (){console.log(a) //a在这里是自由变量,向上寻找}
}const fn = create()
const a = 200
fn() //100
  • 函数作为参数
function print(fn){const a = 13fn()
}
const a = 100
function fn(){console.log(a)
}
print(fn) //100

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

  • this取什么值是在函数执行的时候确定的,不是函数定义的时候确定
  • 箭头函数的this永远取上级作用域的值。
  • 使用call(..)可以确保this指向函数本身

this实际上是在函数被调用时发生的绑定,它指向什么完全取决于函数在哪里被调用

总结


手写bind函数第一个绑定的是this
bind 的功能是:

  • 返回一个新函数。
  • 当调用新函数时,this 指向指定的对象。
  • 可以预置一些参数,调用新函数时这些参数自动传递给原函数。

注意:

  • this要传进去
  • 参数要传进去
  • 返回值要返回回来
    下面的arguments可获取一个函数的所有的参数,它不是数组需要将其转换为数组形式。
    apply第一个参数是this,第二个参数是数组

总结:
bind 函数的实现核心就是通过闭包保存 this 和参数信息,并在执行时将它们传递给原函数。如果你觉得代码有些复杂,建议先理解以下几个关键点:
this 是动态的,可以通过 apply 或 call 方法来改变函数执行时的 this 指向。
闭包可以用来保存 this 和参数,从而在返回的函数中继续使用这些值。
new 调用的特殊情况需要我们使用 instanceof 来判断,并相应处理。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF创建不规则窗体时WebBrowser控件不显示的问题

最近有小伙伴需要在不规则窗体上放置WebBrowser控件,因为设置了WindowStyle="None" 和 AllowsTransparency="True"。 导致WebBrowser控件不显示。界面如下所示:1 <Window x:Class="WebBrowserDemo.MainWindow" 3 xmlns="h…

MUR2060CT-ASEMI快恢复二极管MUR2060CT

MUR2060CT-ASEMI快恢复二极管MUR2060CT编辑:ll MUR2060CT-ASEMI快恢复二极管MUR2060CT 型号:MUR2060CT 品牌:ASEMI 封装:TO-220AB 安装方式:插件 批号:最新 恢复时间:35ns 最大平均正向电流(IF):20A 最大循环峰值反向电压(VRRM):600V 最大正向电压(VF):0.95V~1…

多维度解析:为什么 Traefik 是云原生首选网关?

Hello folks,我是 Luga,今天我们来聊一下云原生生态领域相关的技术 - 云原生网关 Traefik 。 根据 Traefik Labs 团队对于 Traefik 在云原生生态中的定位:云原生反向代理和负载均衡器及网关解决方案。 — 01 — 从生态拥抱视角看:Traefik 的发展前景 从云原生生态视角来看,…

Adafactor Adaptive Learning Rates with Sublinear Memory Cost

目录概符号说明AdafactorFactored Second Moment EstimationNo MomentumOut-of-Date Second Moment Estimator算法代码Shazeer N. and Stern M. Adafactor: Adaptive learning rates with sublinear memory cost. ICML, 2018.概 本文介绍了一种 memory-efficient 的优化器: Ada…

Oracle 19c OCP 认证考试 082 题库(第19题)- 2024年修正版

【优技教育】Oracle 19c OCP 082题库(Q 19题)- 2024年修正版 考试科目:1Z0-082 考试题量:90 通过分数:60% 考试时间:150min 本文为(CUUG 原创)整理并解析,转发请注明出处,禁止抄袭及未经注明出处的转载。 原文地址:http://www.cuug.com.cn/ocp/082kaoshitiku/3822886061…

如何用 Helm 安装指定版本的 GitLab Runner?

本分分享如何使用 Helm 来在 Kubernetes 集群上安装极狐GitLab Runner。整体步骤分为:Helm 的安装、vaules.yaml 文件的配置、Runner 的安装、Runner 的测试。 极狐GitLab 为 GitLab 在中国的发行版,中文版本对中国用户更友好。极狐GitLab 支持一键私有化部署,可以在 ubuntu…

安装程序在安装此程序包时遇到了错误2503

原文链接:https://blog.csdn.net/sisi_new/article/details/139180294 安装程序在安装此程序包时遇到错误2503通常是由于安装权限不足造成的解决方案如下:1.修改TEMP文件夹的权限:进入“C:\Windows\Temp”路径,右键单击Temp文件夹选择“属性”,在“安全”选项卡中修改权限…

安全测试工具(1)- Burp Suite Pro的安装教程

啥是Burp Suite 用于攻击web 应用程序的集成平台 程序员必备技能,不仅可以拿来做渗透测试、漏洞挖掘还能帮助程序员调试程序 Bug 它包含了许多Burp工具,这些不同的burp工具通过协同工作,有效的分享信息,支持以某种工具中的信息为基础供另一种工具使用的方式发起攻击。这些工…

高等数学 1.6 极限存在准则 两个重要极限

目录第一个准则第一个重要极限第二个准则第二个重要极限柯西(Cauchy)极限存在准则 第一个准则 准则Ⅰ:如果数列 \(\{ x_n \}\) ,\(\{ y_n \}\) 及 \(\{ z_n \}\) 满足下列条件: (1)从某项起,即 \(\exists n_0 \in \mathbb{N}_+\) ,当 \(n > n_0\) 时,有 \[y_n \le…

socket套接字通信---win和linux互通(1)

一、Windows下的网络调试工具-NetAssist 下载页面 下载后无需安装,解压缩就是个exe的执行文件。双击打开就可使用 软件界面二、linux下的网络调试工具 nc(netcat) 1、当前系统 $ cat /proc/version Linux version 6.6.47-current-x86 (build@armbian) (gcc (Ubuntu 11.4.0-1u…

第一次编程作业

这个作业属于哪个课程 计科22级34班这个作业要求在哪里 个人项目这个作业的目标 1.设计一个查重算法。2. 了解并学习项目的PSP表格3. 学习如何运用github进行代码管理4. 学习使用性能分析工具,分析代码性能5. 学习如何进行单元测试我的github仓库链接:https://github.com/zfi…