es6学习(二) 函数进阶 this指向问题、深拷贝、浅拷贝

一、函数进阶

1.1 函数的定义和调用

 

采用instanceof判断前者是否属于后者。f instanceof Object.  返回true

 1.2 函数的调用方式

 

 2.this指向问题

2.1 函数内this的指向

 2.2 改变函数内部this指向

 2.2.1 call()

有两个作用:(1)调用函数(2)修改this指向问题。(Father.call(son)将father函数的this指向son)

 则son就可以使用father的属性了

2.2.2 apply()方法

(1)可以调用函数、也可以修改this指向问题。

(2)参数传递必须是数组。

同时打印的时候,将数组去掉,变成每一个单独的元素。

 

 (3)apply的主要应用:可以利用apply借助于数学内置对象求最大值。

因为Math.max()和Math.min()求的是数字中的最大值,而不是数组中的最大值。

此时有一个数组arr = [1,2,3,5,4,5,6].所以就可以使用apply

Math.min.apply(Math, arr),相当于调用了Math.min函数,并且this指向Math,同时,传入的参数是arr中的每一个元素,而不是一个数组。(慢慢理解,一开始有点难理解)

2.2.3 bind()方法

 

(1) bind不会调用原来的函数

(2)可以改变原来函数内部的this指向。返回的是原来函数改变this指向后的新函数。

 (3)应用:如果有的函数不需要立即调用,但是又想改变这个函数内部的this指向,此时用bind

比如:有一个按钮,点击这个按钮后,就禁用这个按钮。3秒钟之后开启这个按钮。

 

 修改:

 有三个按钮:

 2.2.4 cal、apply、bind总结

3.严格模式。

3.1什么是严格模式

 

(1)为脚本开启严格模式——>两种方式

 

 (2)为某个函数开启严格模式。

 3.2 严格模式的变化

 

 

 允许在函数中添加函数。不能在非函数中写函数(比如在if或者for中写函数。)

4. 高阶函数

 5. 闭包

5.1 变量作用域

 5.2什么是闭包

 闭包的本质是函数。

5.3 闭包的作用

(1)延伸了变量的使用范围。外部函数也可以使用内部变量。

但是这个闭包会造成内存泄漏,不点击,就一直不释放内存。

 

 (2)闭包案例:

 (3)闭包的题目:

 

 (4)总结:

 6.递归函数

 (1)利用递归函数求斐波那契数列(兔子序列)

 生兔子:第一天有一只兔子,第三天开始具有生育能力,每次生一只。f(n) = f(n-1)+f(n-2)。前一天的数量加大前天的数量(其实指新生的兔子数量,因此对当前来讲,能新生生兔子的数量等于具有生育能力的兔子,而具有生育能力的兔子等于大前天兔子的数量,因此新生的兔子和大前天兔子的数量相同)

 var fn = function(n) {
            if( n==1 || n == 2) {
                return 1;
            }
            return fn(n-1)+fn(n-2);
        }
        console.log(fn(5));

 (2)递归遍历数据

不仅可以查找各个类别,还可以查找各个类别的子类。

 

 

 7.   拷贝

7.1  浅拷贝

浅拷贝:遇到对象等更深层的数据,只是拷贝的地址。

 修改了拷贝后的数据,原先的数据也被修改。因为浅拷贝遇到对象等更深层的数据,只是拷贝了一个地址。

语法糖:Object.assign(target, obj);  obj是要拷贝的数据。

7.2 深拷贝

 

 要先写拷贝数组,因为数组也属于对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值