参数的默认值
为函数的参数设置初始值时,ES6的新方法
function foo(x, y = '123') {
console.log(x, y)
}
foo('abc')
BTW,参数变量相当于默认声明.在函数中重复声明参数变量会报错.
//错误
function foo(x, y = '123') {
let x = 1
}
foo('abc')
※默认参数必须放在最后.以便于进行使用.
解构赋值
function foo({ x, y = '123' } = {}) {
console.log(x, y)
}
foo({
x: '1',
})
length属性...
length属性返回的实际上是未赋予初始值的参数个数.
function foo(a, b, c = '123') {
}
console.log(foo.length)
作用域
参数的声明括号形成了独立的小作用域.
let a = 1
function foo_1(a, b = a) {
console.log(b)
}
foo_1(2) // 2
let x = 1
function foo_2(y = x) {
x = 2
console.log(y)
}
foo_2() // 1
.name属性
正常来说.name会显示函数的名字
function foo() { }
console.log(foo.name) // foo
对于没有名字的函数,则会显示匿名anonymous
console.log((new Function).name) // anonymous
如果函数被bind()改变指向,则会显示bound foo.
未命名的函数,仅显示bound.
function foo() { }
console.log(foo.bind().name) //bound foo
console.log(function(){}.bind().name) //bound
console.log((new Function).bind().name) //bound anonymous
arguments属性
函数运行时的实参列表。
function foo(a, b, c) {
console.log(arguments)
}
foo(1, 2, 3) //Arguments(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]