ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaScript-函数进阶--更新中

2021-11-24 01:31:15  阅读:152  来源: 互联网

标签:进阶 指向 -- bind JavaScript 调用函数 call apply 函数


学习:

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

改变函数内部this的指向

严格模式的特点

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

闭包的作用

递归的两个条件

深拷贝和浅拷贝的区别

 

目录:

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

 

 

1.函数的定义和调用

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

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

3. new Function()

 

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

 

 

 

1.2 函数的调用方式

普通函数

对象的方法

构造函数

绑定事件函数

定时器函数

立即执行函数

 

 

 

1.3 函数内this的指向

1. 普通函数

指向window

2.对象的方法

指向对象 o

3. 构造函数

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

4.绑定事件函数

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

5.定时器函数

指向Window

6.立即执行函数

指向Window

 

 

 

 

2 改变函数内部this指向

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

2.1 call方法

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

 

 

 

 

 

 

2.2 apply方法

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

 

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

 

修改为: 

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

 

2.3 bind方法

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

 

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

 

 

bind使用最多

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

案例:一个按钮

 

 多个按钮

 

 

 

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. 严格模式

 

标签:进阶,指向,--,bind,JavaScript,调用函数,call,apply,函数
来源: https://www.cnblogs.com/hechunfeng/p/15596433.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有