【ES6系列】Function

一、ES5中如何处理函数参数的默认值?ES6是如何做的呢?

// ES5 参数默认值处理
function f(x, y, z) {
  if (y === undefined) {
    y = 7
  }
  if (z === undefined) {
    z = 42
  }
  return x + y + z
}
console.log(f(1)) //50
// ES6 参数默认值处理
function f(x, y = 7, z = 42) {
  // function f(x, y = 7, z = x + y) { //参数的默认值可以是含有其它参数的表达式

  return x + y + z
}
console.log(f(1)) //50
//console.log(f(1, 8, 43)) //52
//console.log(f(1, undefined, 43)) // 传入undefined跳过赋值,使用默认值

二、ES5中如何处理不确定参数的问题?ES6如何处理?

// ES5中用 arguments 获取函数执行时的参数方法
function sum() {
  let num = 0
  // ES5 伪数组转换方法
  // Array.prototype.forEach.call(arguments, function (item) {
  //   num += item * 1
  // })
  // ES6 伪数组转换方法
  Array.from(arguments).forEach(function (item) {
    num += item * 1
  })
  return num
}
// ES6 中获取函数执行时的参数方法
function sum(...nums) { // 剩余参数 Rest parameter
  let num = 0
  nums.forEach(function (item) {
    num += item * 1
  })
  return num
}
console.log(sum(1, 2, 3, 5)) // 10

// 业务延伸,第一个参数乘以2再加上剩余参数的累加
function sum(base, ...nums) { // 剩余参数 Rest parameter
  let num = 0
  nums.forEach(function (item) {
    num += item * 1
  })
  return base * 2 + num
}
console.log(sum(1, 2, 3)) // 7

 关于函数参数的实际应用业务场景延伸

//业务场景:求三角形边长
function sum(x = 1, y = 2, z = 3) {
  return x + y + z
}
let data = [4, 5, 6]
// console.log(sum.apply(this, data)) // ES5 允许把函数参数收敛到一个数组中调用,并一一对应
console.log(sum(...data)) // ES6 扩展/展开运算符 spread 

二、ES6中的箭头函数是什么?

箭头函数参数和代码块写法:

// 箭头函数无参数时 () 不能省略 有且只有一个参数时可以省略
//let hello = () => { //箭头函数无参数时 () 不能省略
let hello = name => { // 有且只有一个参数时可以省略
  // let hello = (name, city) => {
  console.log('hello world', name)
}
hello('zoe')
// 当代码块只有一个返回值且返回值为一个表达式时可省略{}和return
// let sum = (x, y, z) => x + y + z 
// 如果返回的是一个字面量对象,可省略 return但是对象要用()包裹
let sum = (x, y, z) => ({
  x: x,
  y: y,
  z: z
})
console.log(sum(1, 2, 3))

ES5 函数中的this 和ES6 箭头函数中的 this

// ES5 中的this
let test = {
  name: 'test',
  say: function () {
    console.log(this.name)
  }
}
test.say(); //test 因为say被test调用,所以this指向test
//ES6 中的this
let test = {
  name: 'test',
  say: () => {
    console.log(this.name) // 箭头函数的this是代码this所在位置的对象,而不是调用的对象,这里是window
  }
}
test.say(); 

思考:

1、如何用箭头函数来实现一个数组排序的问题?

2、箭头函数对 this 的处理还有什么妙用?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值