JavaScript高级第三天笔记

本文深入探讨JavaScript中的Call、Apply、Bind方法的使用场景及区别,解析递归函数的执行流程与斐波那契数列的计算,同时介绍缓存、闭包的概念及其在优化性能和数据安全中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

01-call 和 apply 使用场景

  1. 参数比较少的时候,使用call更加简洁
  2. 参数已经在数组或伪数组中,使用apply更合适

例,求数组最大值:

一行代码实现

var arr = [8, 68, 25, 12, 90, 72, 66, 20];

让数组arr去借用Math的max方法

var res = Math.max.apply(arr, arr);
//等价于:arr.max();
console.log(res);

02-bind方法

语法

var fn2 = fn.bind(thisArg);

作用:bind方法会去把fn函数拷贝一份,并且会返回这个副本函数,副本函数内的this指向 bind的thisArg参数

例:

var fn = function() {
    console.log(1);
    console.log(this);
    
}
var fn2 = fn.bind([10, 20, 30]);
console.log(fn2);  //fn2 和 fn函数长得一样

fn2();

注意点:fn2函数调用模式虽然是函数调用模式,但是fn2函数是有bind创建的,fn2函数内的this绑定了bind的thisArg参数

call apply 和 bind 方法区别:

call apply :作用一样,写法上有点区别:

1.可以调用函数
2.可以修改this指向
3.可以给函数传递参数

bind 方法 不会去调用函数 :

1.会拷贝并返回副本函数
2.副本函数内的this指向被固定

03-bind使用练习题

var dfg = {
    lover: '波哥',
    saylove: function () {
        // saylove 方法内的this指向dfg
        setInterval(function () {
            // 定时器函数内的this指向window
            console.log('Dear' + this.lover + ',俺好想你,好想跟你回家!');
        }.bind(this), 1000)
    }
}
dfg.saylove();

04-递归函数

递归函数: 函数内部自己调用自己
注意点:递归函数需要有结束递归的条件

使用递归函数计算的套路:
​ 1.化归思想(把复杂转简单,把未知转已知)-- 理解为是推导公式
​ 2.啥时候结束递归

05-递归函数执行流程

递归执行流程:层层递进,层层回归

06-斐波那契数列

07-递归函数计算斐波那契的问题.html

08-解决递归函数计算斐波那契的问题.html

缓存:存储数据的容器(cache)

在js中,使用数组或对象来进行存储

使用缓存的套路:

1.定义一个数组或对象来表示缓存容器

2.计算之前先去缓存容器中查看下是否有需要的数据,如果有直接从缓存中取出来使用

3.如果没有,就需要去进行计算,还需要把计算好的结果给存储到缓存中 – 为了以后复用

09-浅克隆

思路:

  1. 新建一个新对象{}
  2. 把内容赋值遍历给新建的对象 for…in 遍历

**实现了浅拷贝:**拷贝对象的一层属性, 如果对象里面还有对象,里层的对象没有进行拷贝

**问题:**拷贝出来的对象和源对象之间没有完全独立,之间的修改会影响到对方

js中的对象 ==> 拷贝新的一份

**使用场景:**对象里面都是简单数据类型

10-深克隆

11-闭包的引用

12-闭包

闭包的概念:closure
​ 是函数和声明该函数的词法环境的组合
​ 函数:值得是内部函数 inner
​ 声明该函数:外部函数 fn

​ 词法环境:作用域链
​ 组合:以上的综合,整体

闭包的形成条件:

​ 至少有两个函数,而且是嵌套关系,而且内部函数还需要访问外部函数声明的变量

闭包的作用:

​ 1.可以来保护数据的安全

​ 2.可以持久化维持数据

13-闭包保护缓存数据安全

斐波那契使用知识点:

1. 递归函数--计算结果
2. 缓存--解决大量重复计算的问题
3. 闭包--保护缓存数据的安全性

14-闭包经典面试题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值