ES6(2015)Function函数

Posted 优小U

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6(2015)Function函数相关的知识,希望对你有一定的参考价值。

1. 默认参数

ES5 的时候大家都会这么写:

function foo(x, y) {
    y = y || 'world'
    console.log(x, y)
}
foo('hello', 'imooc')
foo('hello', 0)

ES6中可以把默认参数写在参数列表:

function foo(x, y = 'world') {
    console.log(x, y)
}
foo('hello', 0)

函数参数是从左到右解析,如果没有默认值会被解析成 undefined

在ES6中我们不仅可以给参数默认赋值具体的数值,同时参数赋值支持参数的逻辑运算进行赋值:

function f(x, y = 7, z = x + y) {
    return z * 0.5
}

console.log(f(1, 7)) // 4

2. Rest 参数

function sum(...nums) {
    let num = 0
    nums.forEach(function(item) {
        num += item * 1
    })
    return num
}

console.log(sum(1, 2, 3)) // 6
console.log(sum(1, 2, 3, 4)) // 10

当然,Rest Parameter 也可以和其他参数一起来用,比如:

function sum(base, ...nums) {
    let num = base
    nums.forEach(function(item) {
        num += item * 1
    })
    return num
}

console.log(sum(30, 1, 2, 3)) // 36
console.log(sum(30, 1, 2, 3, 4)) // 40

Rest 参数只能有一个,且必须在参数列表的最后面。

3. 扩展运算符

Spread Operator 和 Rest Parameter 是形似但相反意义的操作符,简单的来说 Rest Parameter 是把不定的参数“收敛”到数组,而 Spread Operator 是把固定的数组内容“打散”到对应的参数。示例如下:

function sum(x = 1, y = 2, z = 3) {
    return x + y + z
}

console.log(sum(...[4])) // 9
console.log(sum(...[4, 5])) // 12
console.log(sum(...[4, 5, 6])) // 15

4. length属性

函数指定了默认值以后,函数的length属性,将返回没有指定默认值的参数个数。

function foo(x = 1, y = 2, z = 3) {
    console.log(x, y)
}
console.log(foo.length)
// 0

5. name属性

函数的name属性,返回该函数的函数名。

function foo() {}

foo.name // "foo"

6. 箭头函数

// 定义函数
function hello() {
    console.log('say hello')
}
// 或
let hello = function() {
    console.log('say hello')
}

// 使用箭头函数
let hello = () => {
    console.log('say hello')
}

带参数箭头函数:

let hello = (name) => {
    console.log('say hello', name)
}
// 或者

let hello = name => {
    console.log('say hello', name)
}

如果只有一个参数,可以省略括号,如果大于一个参数一定要记得带括号。

如果返回值是表达式可以省略 return{}

let pow = x => x * x

如果返回值是字面量对象,一定要用小括号包起来:

let person = (name) => ({
	age: 20,
	addr: 'Beijing City'
})

1、箭头函数中this指向定义时所在的对象,而不是调用时所在的对象
2、箭头函数不可以当作构造函数
3、箭头函数不可以使用arguments对象

以上是关于ES6(2015)Function函数的主要内容,如果未能解决你的问题,请参考以下文章

vue2.0 代码功能片段

ES7-Es8 js代码片段

ES6 箭头函数是不是与 Angular 不兼容?

es6的箭头函数和es5的function函数区别

每天十分钟学好ES6--function函数的扩展

每天十分钟学好ES6--function函数的扩展