函数的高级用法

函数的定义方式

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

function fn() {  };

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

var fun = function() { };(执行效率低,不便书写)

3.new Function('参数1’ , ‘参数2’ ,‘函数体’);

var f = new Function('a', 'b', 'console.log(a+b)' );
f(1,2);
console.log(f); //  3

在这里插入图片描述

改变函数内部this 指向

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

call():可以调用某个函数,并且修改函数运行时的this指向
语法:

fun.call (thisArg, arg1, arg2, ...)

thisArg:当前调用函数this的指向对象;
arg1,arg2:传递的其他参数;
借用构造函数继承父类型属性
核心原理:通过call()把父类型的this指向子类型的this,这样就可以实现子类型继承父类型的属性

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

fun.apply(thisArg,[argsArray])

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

主要应用:可以利用apply借助数学内置对象求取最大值

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

fun. bind (thisArg, arg1, arg2, ...)

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

**主要应用:**如果有的函数我们不需要立即调用,但是又想改变这个函数内部的this指向此时用bind
(例如:有一个按钮,当我们点击了之后,就禁用这个按钮,3秒钟之后开启这个按钮)

<button></button>
var btn = document.querySelector('button');
btn.onclick = function() {
	this.disabled = true; // 这个this 指向的是btn 这个按钮
	//  var that = this ;
	setTimeout (function() {
		// that.disabled = false; // 定时器函数里面的this 指向的是window
		this.disabled = false; // 定时器函数里面的this指向的是window 
	}.bind(this), 3000); // 这个this指向的是btn这个对象

call apply bind 总结

相同点:
都可以改变函数内部的this指向;

区别点:

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

主要应用场景:

  1. call 经常做继承;
  2. apply经常跟数组有关系 比如借助于数学对象实现数组最大值最小值;
  3. bind 不调用函数但是还想改变this指向比如改变定时器内部的this指向.。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值