ES6
对函数的使用进行了一些扩展,这篇文章就简单介绍一下这部分的内容。
- 函数参数设置默认值
ES6
允许为函数的参数设置默认值,即直接写在参数定义的后面。
function func(name) {
name = name || '李焕英'
console.log(`你好,${name}`)
}
func()
func('张小斐')
function hello(name = '李焕英') {
console.log(`你好,${name}`)
}
hello()
hello('张小斐')
function fn1(x, y = 1) {
console.log(x, y)
}
fn1()
fn1(0)
fn1(0, 2)
function fn2(x = 0, y) {
console.log(x, y)
}
fn2()
fn2(1)
fn2(, 1)
fn2(undefined, 1)
function intro({ name: '赵四', comeFrom: '象牙山' }) {
console.log(`我叫${name},来自${comeFrom}`)
}
intro({})
intro({ name: '刘能' })
intro({ name: '王大拿', comeFrom: '龙泉山庄' })
intro()
function fn1({ name: '小明', age: 18 } = {}) {
console.log(name, age)
}
function fn2({ name, age } = { name: '小明', age: 18 }) {
console.log(name, age)
}
fn1()
fn2()
fn1({ name: '小红', age: 16 })
fn2({ name: '小红', age: 16 })
fn1({ name: '小黑' })
fn2({ name: '小黑' })
fn1({})
fn2({})
fn1({ sex: '男' })
fn2({ sex: '男' })
(function (a) {}).length
(function (a, b) {}).length
(function (a, b = 1) {}).length
(function (a, b = 1, c) {}).length
(function (...args) {}).length
- 函数参数设置默认值时会形成一个单独作用域
一旦设置了参数的默认值,函数进行声明初始化时,参数会形成一个单独的作用域。等到初始化结束,这个作用域就会消失。这种语法行为,在不设置参数默认值时,是不会出现的。——《ECMAScript 6 入门》
var x = 1
function fn(x, y = x) {
console.log(y)
}
fn(2)
let x = 1
function fn(y = x) {
let x = 2
console.log(y)
}
fn()
function fn(y = x) {
let x = 2
console.log(y)
}
fn()
rest
参数(不定参数)
ES6
引入rest
参数(形式为…变量名),用于获取函数的多余参数,这样就不需要使用arguments
对象了(之前已经学习过,箭头函数中没有arguments
对象)。
const add = (...values) => {
let sum = 0
for (let val of values) {
sum += val
}
return sum
}
add(1, 2, 3)
function aoeiuv() {}
console.log(aoeiuv.name)