ES6之函数扩展

99 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情

企业微信截图_20220801103419.png

1.函数允许参数默认值

直接写在参数定义后面,不传参才会使用默认值,后面使用 “ ”算传参了,前面使用“ ”算没有传参

1.正确实例:

function log(x, y = 'World') {
console.log(x, y);
}
log('Hello') // Hello World
log('Hello', 'China') // Hello China
log('Hello', '') // Hello

2.参数默认值时,函数不能有同名参数

1.错误实例

参数重名:
function foo(x, x, y = 1) {
// ...报错
}

3.参数默认值已经算定义了,不能不能用let或const再次声明

1.错误实例

s(x,y="1") {
     let x=18;
// ...报错
    }

4.省略参数

默认值的参数,应该是函数的尾参数(x,y=1),如果不是 调用函数不能省略参数

1.错误实例

默认值没有放在尾部

function f(x = 1, y) {
return [x, y];
}
f() // [1, undefined]
f(2) // [2, undefined])
f(, 1) // 报错
f(undefined, 1) // [1, 1]

5.传入undefined,将触发该参数等于默认值,null则没有这个效果

2.函数的length

函数的参数个数减去指定默认值的参数个数

1.实例:

length属性返回的值
(function (a) {}).length // 1
(function (a = 5) {}).length // 0
(function (a, b, c = 5) {}).length // 2

3.rest参数(...变量名)

用法:(... 变量名)

注意: rest 参数之后不能再有其他参数,否则会报错

(1)函数中使用就是rest参数:将多余的参数变成一个数组

(2)正常使用就是扩展运算:将数组变成遍历出来(常用于数组合并)

  1.将多余的参数变成一个数组

function input(...params){
console.log(params)
}
input(1,2,3,4) //[1,2,3,4]

function input2(a,b,...params){
console.log(params)
}
input2(1,2,3,4) //[3,4]

2.错误实例:rest后面有参数

function f(a, ...b, c) {
// 报错
}

4.name属性

用法:f.name()

返回该函数的函数名

1.es5中匿名函数返回“”,es6中返回真实名字

2.Function构造函数返回的name

3.bind返回的函数的name

例子:

1.匿名函数的name

var f = function () {};
// ES5
f.name // ""
// ES6
f.name // "f"

2.Function构造函数返回的函数实例,name属性的值为anonymous

(new Function).name // "anonymous"

3.bind返回的函数,name属性值会加上bound前缀

function foo() {};
foo.bind({}).name // "bound foo"
(function(){}).bind({}).name // "bound "

5.箭头函数

用法:=>定义

1.定义匿名函数

左边没有等号,只有右边有

当参数左右有=时就不是匿名函数

 

1.例子:
 let arr = ["apple""orange""ban"];
      let a = arr.map(item => {
        return item;
      });

2.没有参数()

没有参数的时候需要在箭头前加上()

var single = () => {
return "l am a girl";
};

3.一个参数函数

一个参数的时候可以忽略()

var single =a=>a
single('hello“)

4.多个参数

多个参数需要用到小括号,参数间逗号间隔

var add = (a, b) => {
return a - b;
};
console.log(add(8,3))

5.函数体多条语句

函数体多条语句需要用到大括号  

var add=(a,b)=>{
if(a<b){
return b-a;
}else {
return a-b;
}
};
console.log(add(3,8));

6.返回对象

返回对象时需要用小括号包起来,因为大括号被占用解释为代码块了

var ob=()=>({
name:'白白',
age:18
})
console.log(ob())

7.与变量解构结合使用

var jie=(a,b)=>a+b;
const full = ({ first, last }) => first + ' ' + last;

8.直接作为事件处理函数

document.addEventListener('click', ev => {
console.log(ev)
console.log(ev)
})