ES6中函数的新特性(1)

函数的扩展

函数的默认值问题
  1. ES6允许为函数的参数设置默认值,直接写在参数定义的后面。参数变量是默认声明的,不能用let或const再次声明.例如:
	funtion foo(x=5){
		let x=1;  ==>Error x已经作为参数声明了,不能再声明
	}
  1. 参数默认值不是传值的,而是每次重新计算表达式的值,也就是惰性求值
	let x=99;
	function foo(p=x+1){
		console.log(p)
	}
	foo(); ==>100
	x=100;
	foo(); ==>101
  1. 避免没有给参数赋值报错
function foo({x,y=5}={}){
	console.log(x,y);
}
foo(); ==>undefined,5
  1. 设定默认值的参数应该是函数的尾参数。这样容易看出省略了哪些参数,如果非尾部的参数设置默认值,实际这个参数是没法省略的
function f(x=1,y){
	return [x,y];
}
f();  ==>[1,undefined]
f(2); ==>[2,undefined]
f(,1);==>error
f(undefined,1); ==>[1,1]	//这里必须严格传入undefined,默认值才会生效.其余地方同理
  1. 指定了默认值以后,函数的length属性将返回没有指定默认值的参数个数。但是如果设置默认值的参数不是尾参数,length属性也不会计入后面的参数.也就是返回从第一个参数开始到默认值参数位置的参数的个数

    (function (a=0,b,c){}).length ==>0
    (function (a,b=0,c){}).length ==>1

  2. 设置了参数的默认值之后,函数进行声明初始化时,参数会形成一个单独的作用域(context)。初始化结束后作用域就会消失

var x=1;
function(x,y=x){
	console.log(y)
}
f(2) //2  调用时x默认指向第一个参数x,而不是全局x
let x=1;
function f(y=x){
	let x=2;
	console.log(y)
}
f() ==>1 调用时,y=x作为单独的作用域,因为参数中的x未定义,所以自动转到全局的x。函数体内的局部变量x不会影响默认值变量x,如果全局变量x不存在就会报错

箭头函数

  1. 箭头函数的好处就是能简化回调函数,让this指向固定化(函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象)
  2. 基本形式:var f = v => v,这个函数等价于var f=function(v) { return v; }
  3. 如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分.例如:var f=()=>5等价于var f=function(){return 5;}
  4. 如果箭头函数的代码块部分多于一条语句,就要使用大括号括起来,并使用return返回
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值