- 箭头函数:
箭头函数虽然语法简洁、但也有很多场合不适用。箭头函数不能使用
arguments
、super
和new.target
,也不能用作构造函数。此外箭头函数也没有prototype
属性。
1. 函数中的arguments
arguments
对象是一个类数组对象,因此可以使用中括号语法访问其中的元素。而要确定传进来多少个参数们可以访问arguments.length属性。
javascript
function say(name,message){
console.log(arguments[0]);
console.log(arguments[1]);
console.log(arguments.length);
}
say('maria','这是一条信息')
arguments
对象的值始终会与对应的命名参数同步。
- 在函数内部修改
arguments
的值,调用函数的时候值已经改变了其实
javascript
function doAdd(name ,age){
arguments[1]=22
console.log(arguments[0]);//lisa
console.log(arguments[1]);//22
}
doAdd('lisa',66)
对于命名参数而言、如果调用函数时没有传这个参数,那么它的值就是
undefined
。这就类似于定义了变量而没有初始化。
2. 箭头函数中的参数
箭头函数中的参数不能使用
arguments
关键字访问,而只能通过定义的命名参数访问。但可以包装在函数中把它提供给箭头函数。
javascript
let arrow=()=>{
console.log(arguments[0]);
}
arrow()
3. 函数赋默认值
es5
之前,实现默认参数的一种常用方式就是检测某个参数是否等于undefined,如果是则意味着没有传这个参数直接给它赋值就行。- 但是
es6
之后,支持显式定义默认参数了,只要在函数定义中的参数后面用=
就可以为参数赋一个默认值了。
javascript
function test(name){
if(name==undefined){
name='这是默认值'
}
console.log(name);
}
test()
- 这一种更好用点
javascript
function test1(name='第二种直接在这设置默认值'){
console.log(name);
}
test1()
4. 函数表达式
定义函数的两种方式:函数声明和函数表达式:
- 函数声明的关键特点是
函数声明提升
,函数声明会在代码执行之前获得定义。- 函数表达式即创建一个函数再把它赋值给一个变量。
这样创建的函数叫做匿名函数,其中匿名函数中的
this
指向的是window
,要去另一篇文章this
指向
- 函数声明:
javascript
// 函数声明
sayHi() //函数声明的特点就是函数声明提升了
function sayHi(){
console.log('say hi brother');
}
- 函数表达式:
javascript
// 函数表达式
sayNo()
let sayNo=function(){
console.log('say no');
}
- 函数表达式没有
声明提升
,这样会报错的。