补充知识 arguments、apply

上一篇博客写到防抖和节流的简单分析和操作,在经典代码中有一些自己之前没有涉及过的知识点,此篇博客特来补充学习一下。

一、arguments

在这里插入图片描述
一、简介

了解arguments这个对象之前先来认识一下javascript的一些功能:
**其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载。**Javascrip中每个函数都会有一个Arguments对象实例arguments,它引用着函数的实参,可以用数组下标的方式"[]"引用arguments的元素。arguments.length为函数实参个数,arguments.callee引用函数自身。

我们来声明一个函数,并打印它的arguments

	(function (a){
		console.log(arguments)
		console.log(a)
	})(1)

控制台打印如下:
在这里插入图片描述
这里再补充一个知识,立即执行函数
立即执行函数的两个形式:

(function() {
}) ()

(function () {
} ())

常见函数都是声明函数名之后再通过函数名调用,而立即执行函数声明后可立即调用,使用形式如上。

二、apply

提到apply,这里就需要再说一下与之相近的 call 和 bind。

先来看两个例子

var name='蔡徐坤',hobby='唱跳'
var obj={
	name: '菜虚鲲',
	hobby:this.hobby,
	myfun:function(){
		console.log(this.name + '爱好' + this.hobby )
	}
}
console.log(obj.hobby) //唱跳
obj.myfun()  // 菜虚鲲爱好唱跳

这里的this指向的是obj

var hobby='打篮球'
function yourHobby(){
	console.log(this.hobby)
}
yourHobby() // 打篮球

这里的this指向的是window

call、apply、和bind 都可以改变this指向

来看例子

var hobbyObj = {
	name: '蔡徐坤',
	hobby: '打篮球'
}
obj.myfun.call(hobbyObj) //蔡徐坤爱好打篮球
obj.myfun.apply(hobbyObj) //蔡徐坤爱好打篮球
obj.myfun.bind(hobbyObj)() //蔡徐坤爱好打篮球

现在的this指向了hobbyObj,bind与call 和apply的区别在于多了一个(),其他都是一致的。

再来看一下他们的传参形式

var name='蔡徐坤',hobby='唱跳'
var obj={
	name: '菜虚鲲',
	hobby:this.hobby,
	myfun:function(hobby2,hobby3){
		console.log(this.name + '爱好' + this.hobby + '、'+hobby2 + '和'+ hobby3 )
	}
}

var hobbyObj = {
	name: '蔡徐坤',
	hobby: '打篮球',
}
obj.myfun.call(hobbyObj, '唱跳','rap')      //蔡徐坤爱好打篮球、唱跳和rap
obj.myfun.apply(hobbyObj,['唱跳','rap'])    //蔡徐坤爱好打篮球、唱跳和rap
obj.myfun.bind(hobbyObj,'唱跳','rap')()     //蔡徐坤爱好打篮球、唱跳和rap
obj.myfun.bind(hobbyObj,['唱跳','rap'])()   //蔡徐坤爱好打篮球、唱跳,rap和undefined

由此可以看出,call和bind传参都是参数列表,而apply传参是以数组的形式传参,bind返回的是函数,其他与call 和apply相同。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值