最简单理解的闭包和递归,重要的是逻辑

344 阅读1分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情。 一、面向对象的介绍

一、 函数this指向 : 谁‘调用’我,我就指向谁

1.1 普通函数: 函数名() this -> window
1.2 构造函数: new 函数名() this -> new创建实例
1.3 对象方法: 对象名.方法名() this -> 对象
默认情况下,函数内部的this是固定的,无法动态修改。 如果想要动态修改函数this指向,需要使用函数上下文调用。 函数上下文 : 函数作用域

函数上下文调用 : 动态修改this指向
函数名.call()
函数名.apply()
函数名.bind()

call() apply() bind()三者异同点
相同点: 作用一致,都是修改this指向
不同点:
(1)传参方式不同 : call是单个传参, apply是数组/伪数组传参
(2)执行机制不同 : call和apply立即执行函数, bind不会立即执行,而是返回一个修改this之后的新函数

二、闭包的介绍

闭包是什么 : 闭包是一个 访问其他函数内部变量 的 函数
闭包组合 = 函数 + 上下文引用

闭包作用 : 解决变量污染;闭包一般用于回调函数

三、递归

递归函数 : 在函数内部调用自己。递归函数 功能 和循环类似的。(优先用循环,递归少用)

递归函数应用
1 浅拷贝与深拷贝

浅拷贝: 拷贝地址, 修改拷贝后的数据对原数据有影响
深拷贝: 拷贝数据, 修改拷贝后的数据对原数据没有影响
(使用JSON : let newObj = JSON.parse( JSON.stringify( obj ) ))

2 遍历dom树