es6里面对于函数的改变

1 箭头函数

不得不说箭头函数,好用指向性强
下面的sum就是标准的箭头函数,省略掉了function这个关键字:

const sum = (a,b) => {
	return a + b;
}
console.log(sum(3,4));

=>是一个完整的运算符,之间不能有空格。
如果函数体内只有一行语句,可以省略{}和return。 const sum = (a,b) => a + b; console.log(sum(45,5));
反过来,如果函数体内有多条语句,此时必须写{}和return单词。
箭头函数的美,最能体现在连续箭头。当外层函数被调用的时候,将返回内层的函数。调用的时候可以加两层圆括号。

const fn = (a , b) => (m) => {
	return a + b + m;
}
console.log(fn(3,4)(5));  //12
等价于:
const fn = function(a,b){
	return function(m){
		return a + b + c
	}
}
箭头函数中的this是定义时所处的上下文,和如何调用无关!

比如下面有一个obj对象,这个对象的b方法是用箭头函数写的。这个箭头函数所在的最外层函数体是window域。所以this不管b函数如何被调用,一律是window对象。

var a = 9;
var obj = {
	a : 1 ,
	b : () => {
		console.log(this.a);
	}
}

obj.b(); //9 , 

因为虽然是对象打点调用函数,但是由于函数是箭头函数,所以之前学习的规则2,不生效。一律上下文是window对象。

甚至call、apply失效:
var haha = {
a : 8888
}
obj.b.call(haha); //9
obj.b.apply(haha); //9

node没有全局window对象,所以在node 里面记载的都是undefined;

this在箭头函数中是固定的,这个性质是我们应该防止的、加以警惕的;而不是利用的。
箭头函数有几个使用注意点。

(1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
(2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
(3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
4) 不可以使用yield命令,因此箭头函数不能用作 Generator 函数。

2 bind()

bind表示给一个函数定死上下文,而无论它如何被调用。

比如下面有一个函数fun,函数体输出this.a。
我们在后面有一个.bind()语句,彻底将fun函数的上下文定死了,就是obj对象。
无论fun函数如何被调用,一律上下文是obj对象。

function fun(){
	console.log(this.a);
}

//这是一个对象
var obj = {
	a : 233 ,
	b : 886
}

//这是另一个对象
var another = {
	a : 6666666666666
}
//定死上下文为obj对象
fun = fun.bind(obj);//把fun的上下文绑给了obj
fun();						//233

fun.call(another);			//233,call失效了,
fun.apply(another); 		//233,apply失效了无论fun函数如何被调用,一律上下文是obj对象。


bind和call和apply有什么区别?

⦁ bind不调用函数,call和apply会调用函数。
⦁ bind能绑死上下文,call和apply是临时的。

3 默认参数

在形参列表中可以加等号运算符,表示参数的默认参数,当我们没有传入这个参数的时候,将自动使用这个默认参数。

const mianji = (r , pi = 3.14) => {
	return pi * r  * r;
}

console.log(mianji(10 , Math.PI));	//传了第二个参数,就是用第二个参数
console.log(mianji(10));				//没有第二个参数,将用默认的3.14

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值