ES6—函数的扩展

1、函数参数的默认值

ES6允许为函数的参数设置默认值,可以直接写在参数定义的后面。

  • 参数中的变量是默认声明的,多以不能使用let或const再次声明
  • 定义了默认值的参数应该放在函数参数的末尾
  • 函数的length属性返回不包含指定默认值的参数个数(for length为函数预期传入的参数个数)
  • 如果参数的默认值是一个变量,则该变量的作用域先是当前函数作用域,再是上级作用域(但需要函数调用时该变量的值已经生成)
let x = 1;
function f(x, y = x) {
    console.log(y);
}
f(2) // y === 2

let x = 1;
function f(y = x) {
    let x = 2;
    console.log(y);
}
f() // y === 1
  • 如果函数A的参数默认值是函数B,函数B的作用域为函数声明时所在的作用域即全局作用域而不是A
let foo = 'outer';
function bar(func x => foo) {
    let foo = 'inner';
    console.log(func()); // outer
}
  • 可以利用默认值,用于指定某个参数不可忽略(定义默认值为一个报错函数)

2、rest参数及扩展运算符

rest参数(…变量名)用于获取多余参数
扩展运算符(…)用于将数组转化成数字的参数序列

3、箭头函数

ES6允许使用箭头(=>)定义函数
var f = v => v;
上面的箭头函数等同于:
var f = function(v) {
return v;
}
(1)当箭头函数没有参数或者需要多个参数时,使用圆括号括起来
var f = () => 5;
var sum = (num1, num2) => num1 + num2;
(2)如果箭头函数的代码块多余一行语句,就要使用大括号将其括起来,并使用return语句。
由于{}会被解析成代码块,如果箭头函数直接返回一个对象需要使用括号将该对象括起来。
(3)对于箭头函数,函数体内的this为定义时所在对象,而不是使用时所在的对象,在箭头函数中this对象是固定的。

function foo() {
 setTimeout( () => {
     console.log("id", this.id);
 }, 100);
}
foo.call( { id: 42 } ); // 42

4、尾调用

在函数的尾部调用另外一个函数,不需要再保存函数自己的变量完成优化,只保存内层函数的指针

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值