JavaScript-函数进阶--更新中

学习:

函数的多种定义和调用方式

改变函数内部this的指向

严格模式的特点

把函数作为参数和返回值传递

闭包的作用

递归的两个条件

深拷贝和浅拷贝的区别

 

目录:

  1. 函数的定义和调用
  2. 严格模式
  3. 高阶函数
  4. 闭包
  5. 递归

 

 

1.函数的定义和调用

1. 函数声明方式function关键字(命名函数)

2. 函数表达式(匿名函数)

3. new Function()

JavaScript-函数进阶--更新中

 

  •  Function里面参数都必须式字符串格式
  • 第三种方式执行效率低,也不方便书写,因此较少使用
  • 所有函数都是Function的实例(对象)
  • 函数也属于对象

JavaScript-函数进阶--更新中

 

 

 

1.2 函数的调用方式

普通函数

JavaScript-函数进阶--更新中

对象的方法

JavaScript-函数进阶--更新中

构造函数

JavaScript-函数进阶--更新中

绑定事件函数

JavaScript-函数进阶--更新中

定时器函数

JavaScript-函数进阶--更新中

立即执行函数

JavaScript-函数进阶--更新中

 

 

 

1.3 函数内this的指向

1. 普通函数

指向window

2.对象的方法

指向对象 o

3. 构造函数

this指向实例对象,原型对象里面的this也是指向实例对象

4.绑定事件函数

绑定事件函数this指向的是函数的调用者btn这个按钮对象

5.定时器函数

指向Window

6.立即执行函数

指向Window

JavaScript-函数进阶--更新中

 

 

 

 

2 改变函数内部this指向

Javascript 为我们专门提供了一些函数方法来帮我们更优雅的处理函数内部this的指向问题,常用的有bind()、call()、apply()三种方法。

2.1 call方法

call()方法调用一个对象。简单理解为调用函数的方式,但是它可以改变函数的this指向。

JavaScript-函数进阶--更新中

 

 JavaScript-函数进阶--更新中

 

 JavaScript-函数进阶--更新中

 

 

2.2 apply方法

apply()方法调用一个函数。简单理解为调用函数的方式,但是它可以改变函数的this指向

JavaScript-函数进阶--更新中

 

  •  thisArg: 在fun函数运行时指定的this值
  • argsArray: 传递的值,必须包含在数组里面
  • 返回值就是函数的返回值,因为它就是调用函数

JavaScript-函数进阶--更新中

 

修改为: 

var max=Math.max.apply(Math,arr);

 

2.3 bind方法

bind()方法不会调用函数。但是能改变函数内部的this指向

JavaScript-函数进阶--更新中

 

  •  thisArg:在fun函数运行时指定的this值
  • arg1,arg2:传递的其他参数
  • 返回由指定的this值和初始化参数改造的原函数拷贝

JavaScript-函数进阶--更新中

 

 

bind使用最多

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

案例:一个按钮

JavaScript-函数进阶--更新中

 

 多个按钮

JavaScript-函数进阶--更新中

 

 

 

2.4 call和apply以及bind总结

相同点:

都可以改变函数内部的this指向

区别点:

  1. call和apply会调用函数,并且改变函数内部this指向;
  2. call和apply传递的参数不一样,call传递参数arul1,aru2...形式,apply必须数组形式[arg]
  3. bind不会调用函数,可以改变函数内部this指向

主要应用场景

1. call经常做继承

2.apply经常跟数组有关系,比如借助于数学对象实现数组最大值最小值

3.bind不调用函数,但是还是想改变this指向。比如改变定时器内部的this指向。

 

 

 

3. 严格模式

 

上一篇:如何在Vue中使用动态CSS


下一篇:C++11 标准库 bind 函数