This指向
This: 谁调用我,我就指向谁
- 全局函数: this指向window
- 对象方法: this指向对象
- 构造函数: this指向new创建的空对象(事列对象)
共同的特点 this的指向无法动态修改
函数执行的上下文模式
可以动态修改函数中的this
Call语法 : 函数名.call ( this修改后的指向 ,ar1 ,ar2,ar3....)
apply语法 :函数名.apply (修改的this,[ 数组或伪数组]
Bind语法: 函数名bind(修改的this )
在bind中,不会立即执行这个函数,返回修改this后的新函数
对此的总结为:
三个相同点是都可以动态的修改函数的this指向
两个不同点:
执行不同,Call,apply会直接执行,而bind不会立即执行
传参方式的不同 ,Call后面跟很多,而apply后面跟的是数组、
伪数组转换为真数组Array.from (伪数组)
Let arr = Array.from (weiArr)
相同点都可以改变函数的this指向
执行机制不同
Call和apply会立即执行,bind不会立即执行
传参方式不同,call多,而apply是伪数组或者数组
闭包
a闭包是一个可以访问其他函数内部变量的函数
B 闭包 = 函数+上下文的引用
- 闭包的作用,解决变量污染问题
一般用于回调函数
递归
递归函数:一个函数在内部调用自己
浅拷贝:拷贝地址
修改拷贝后的数据,原数据也会修改
深拷贝:拷贝数据
先把js对象转换成json字符串
let jsonStr = JSON.stringify (obj )
再把json字符串转换成js对象
let newOBJ = JSON.parse ( jsonStr)
递归函数
遍历obj,把所有的属性添加给newobj
如果obj[key]是引用类型(数组,对象则不能直接拷贝
反之则直接赋值,结束递归