带你读书之“红宝书”:第十章 函数⑨

本文详细介绍了JavaScript中的尾调用优化和闭包的概念。尾调用优化是在确定外部函数栈帧不再需要时,优化内部函数调用的过程,有助于提升代码效率。闭包则是能访问另一个函数作用域变量的函数,它允许突破作用域链。文中还探讨了this对象在不同情况下的绑定规则以及内存泄漏的核心——解除对象引用。同时,文章指出将随着学习深入不断更新和完善。
摘要由CSDN通过智能技术生成

「这是我参与2022首次更文挑战的第40天,活动详情查看:2022首次更文挑战

写在前头

大多数小伙伴看技术书籍都会用“啃”来描述读书的直观感受,当然我也是一个前端小白,白的透明那种,但是我在读技术书籍感觉到“啃”的时候,我希望把我啃红宝书第四版的过程的想法,总结带给大家,以供后来者能够更快上手。

注: 本文由于作者水平原因,如有错误之处,恳请大家指正,另外随着学习的深入,体会的加深,我会不断回来更新,修改这类文章。

思维导图

image.png

简述

函数这一章其实在有一定的编程基础,比如学过一点c语言就很好读下去。整体还是易读板块。

10.13 尾调用优化

image.png

  • 什么是优化

    外部函数的返回值是一个内部函数的返回值

  • 10.13.1 尾调用优化的条件

①4个条件

核心唯一一个条件就是确定外部栈帧真的没有必要存在了。

②应用场景

③为什么要严格模式

在非严格模式下函数调用中允许使用 f.arguments和 f.caller,而它们都会引用外部函数的栈帧。

  • 10.13.2 尾调用优化的代码

代码改进实例

10.14 闭包

image.png

  • 概念

闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域

  • 内部函数作用域链包含“父”函数的作用域

  • 调用函数时

创建

这里看书的p310页。我也理解不太深刻。

活动对象

第一对象

传入参数,arguments对象。

第二对象

全局上下文的变量对象

  • 函数执行

变量对象

在全局上下文中

活动变量

在函数局部上下文

作用域本质

在定义函数时,就会为它创建作用域链,预装载全局变量对象,并保存在内部的[[Scope]]中。在
调用这个函数时,会创建相应的执行上下文,然后通过复制函数的[[Scope]]来创建其作用域链。接着会创建函数的活动对象(用作变量对象)并将其推入作用域链的前端。在

  • 销毁问题

书上的框架图十分清楚简单。

  • 10.14.1 this对象

①内部函数

内部函数没有使用箭头函数定义,则 this 对象会在运行时绑定到执行函数的上下文。

②严格模式

在全局函数中调用,则 this 在非严格模式下等于 window。

在严格模式下等于 undefined。如果作为某个对象的方法调用,则 this 等于这个对象。

注意

匿名函数在这种情况下不会绑定到某个对象,这就意味着 this 会指向 window。

在严格模式下 this 是 undefined。

③this 和 arguments 都是不能直接在内部函数中访问的。

  • 10.14.2 内存泄漏

核心:解除对对象的引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值