JS高级(4)函数的定义和调用

1.函数的定义方式

1.函数声明式(命名函数)
	function fn(){}
2.函数表达式(匿名函数)
	var fn = function(){}
3.new Function()
	var fn = new Function('参数1','参数2',...'函数体')
		举个🌰: var f = new Function('a','b','console.log(a+b)')
		f(1+2)
	注意:
		1.Function里面的参数都必须是字符串形式
		2.第三种执行效率第,不方便书写
		3.所有的函数都是Function的实力对象
		4.函数也属于对象

2.函数的调用

2.1.普通函数
function fn (){
		console.log('哈哈')
	}
fn()	//调用
2.2.对象的方法
let o = {
	sayHa:function(){
		console.log('哈哈')
	}
}
o.sayHa()	//调用
2.3.构造函数
function Star(){}
new Star 调用	
2.4.绑定事件函数
btn.onclick = function(){}
点击按钮调用
2.5.定时器函数
SetInterval(function(){},1000)
每秒调用1次
2.6.立即执行函数
(function(){console.log('哈哈')})()
自己调用

3.this

3.1.函数内部的this指向

this的指向是调用函数的时候确定的。调用方式的不同决定了this的指向不同,一般指向我们的调用者。

调用方式this指向
普通函数调用window prototype
构造函数调用实例对象,原型对象里的方法也指向实例对象
对象方法调用该方法所属的对象
事件绑定调用绑定/触发事件的对象
定时器函数window
立即执行函数window
3.2.改变函数内部this指向
3.2.1.call方法
1.可以调用函数,也可以改变this指向
	应用场景:做继承
	let o = {name : 'dai'}
	function fn (a,b){
		console.log(this)
		console.log(a+b)
	}
	fn(1,2)		//window,3
	fn.call(o,2,3)		//对象o, 5 
3.2.2.apply方法
1.可以调用函数,也可以改变this指向
	应用场景:经常跟数组有关
	let o = {name : 'dai'}
	function fn(a,b){
		console.log(this)
		console.log(a+b)
	}
	fn(1,2) 	window 	3
	fn.apply(o,[1,2])	对象o 	3
举个🌰:
	let arr = [1,2,3]
	Math.max.apply(Math,arr)	3
3.2.3.bind方法
1.不会调用函数,但是能改变this指向
	返回的是原函数改变this之后产生的新函数
	应用场景:不调用函数,还想改变this指向
	let o = {name:'dai'}
	function fn (a,b){
		console.log(this)
		console.log(a+b)
	}
	let f = fn.bind(0,1,2)			此处f是bind返回的新函数
	f()		对象o	3
3.2.4.call,apply,bind三者的异同
-- 共同点:都可以改变this指向
-- 不同点:
	call 和 apply 会调用函数,并改变this指向
	call 和 apply 传参方式不同,call 传参用逗号隔开,apply 传递数组
	bind不会调用函数,但改变this指向
-- 应用场景:
	1.call经常做继承
	2.apply经常跟数组有关系,借于数字对象实现数组最大,最小值。
	3.bind不调用函数,但是改变this指向,比如改变定时器内部的this指向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值