美文网首页让前端飞
ES6之函数的扩展

ES6之函数的扩展

作者: wade3po | 来源:发表于2019-04-30 09:33 被阅读2次

ES6对函数的扩展函数蛮多的,不过常用的估计也就是默认值和箭头函数了。

函数参数默认值:

估计很多人都这样用过默认值:

var a = 10;

var b = a || 1

正常情况下没有问题,但是要是a是0或者是false等会被转换成Boolean类型false的时候就会出错。ES6对参数的默认值允许直接设置:

function fn(x = 10, y = 20) {  

  console.log(x);  

  console.log(y);

}

fn()// 10 20

参数默认值相当于你考虑了没有参数的情况,没有参数也不会报错。要注意的是参数变量不能用let或者const再次声明,不允许同名。参数默认值位置是不能跳过的,想要跳过默认想要传undefined,null无效。还有一点,没有默传参情况下才会赋值:

function fn(x = (function () {  

  console.log('执行');

})(), y = 20) {



}

fn()//执行fn(10)

参数默认值和解构赋值配合使用:

function fn({x = 10, y = 20} = {}) {  

  console.log(x);  

  console.log(y);

}

fn()//10 20

fn({x: 30, y: 40})//30 40

Length属性:

简单说就是参数个数:

function fn(a, b, c) {}

console.log(fn.length);//3

有默认值的时候,这个length只会计算最后面有默认值之前的参数个数:

function fn(a = 0, b, c) {}

console.log(fn.length);//0

function fn(a, b = 0, c) {}

console.log(fn.length);//1

function fn(a, b, c = 0) {}

console.log(fn.length);//2

function fn(a = 0, b = 0, c) {}

console.log(fn.length);//0

函数参数作用域:

设置函数参数默认值的时候,参数会形成一个单独的作用域,初始化接收作用域消失。注意,只有设置默认值的时候才会。

var a = 1;function fn(a, b = a) {  

  console.log(a);

}

fn(10)//10

形成一个作用域,b指向了参数里面的a

var a = 1;

function fn(b = a) {  

  var a = 10;  

  console.log(b);

}

fn()//1

形成作用域,a没有找到就向外寻找,找到全局的a。

Rest参数:

函数有一个arguments参数,我们可以用数组的方法去获取内容,但是arguments不是数组,用不了数组的方法。Rest参数其实就是用扩展运算符把参数变成一个数组:

function fn(...val) {   

 console.log(val);

}

fn(1, 2, 3)//[1, 2, 3]

严格模式:

ES5之后可以函数内部使用严格模式,ES6只要使用了默认值、解构赋值、或者扩展运算符就不能使用

function fn() {  

  'use strict'

}

Name属性:

ES6对name有一些调整,优先函数名字,其次函数变量的名字,Function构造函数会返回anonymous,通过bind改变this的会加bound

function fn() {}

console.log(fn.name);//fn

var fn = function () {}

console.log(fn.name);//fn

var fn = function ffn() {}

console.log(fn.name);//ffn

console.log((new Function).name);//anonymous

function fn() {}

console.log(fn.bind({}).name);//bound fn

箭头函数:

这应该不用多说了,现在几乎都使用箭头函数,之前也有分享过箭头函数的一些内容。

双冒号运算符:

双冒号左边是一个对象,右边是一个函数。该运算符会自动将左边的对象,作为上下文环境(即this对象),绑定到右边的函数上面。这好像目前是一个提案,我试着写了写,运行报错。

尾调用优化:

尾调用是被忽略的,所以单独分享了一篇尾调用优化的,可以查看。

函数参数尾逗号:

我们函数不管是调用还是定义的时候,都不会在参数最后面加个逗号,ES2017才开始允许加逗号不报错:

function fn(a, b,) {  

  console.log(a);  

  console.log(b);

}

fn(10, 20,)

Coding 个人笔记

image

相关文章

  • es6的数值,函数,字符串扩展

    一、es6的数值扩展 二、es6的函数扩展 代码效果:对象解构在函数中的应用 三、es6字符串扩展 常用方法 代码...

  • es6之扩展运算符 三个点(...)

    es6之扩展运算符 三个点(...)对象的扩展运算符数组的扩展运算符总结es6之扩展运算符 三个点(…)对象的扩展...

  • ES6之函数扩展

    目录一、 函数参数的默认值二、rest参数三、严格模式四、name 属性五、箭头函数六、双冒号运算符(目前报错,只...

  • ES6之函数扩展

    (1)rest参数 rest 参数(形式为...变量名),用于获取函数的多余参数,这样就不需要使用argument...

  • ES6之函数扩展

    关键词:函数扩展 参数的默认值 属性的默认值 rest:获取函数的多余参数 箭头函数 箭头函数使用注意:1.函数体...

  • ES6之函数的扩展

    ES6上函数的扩展表现在不仅体现在参数和属性变化还有具体函数表现形式的变化。 首先是ES6上函数参数上的...

  • ES6之函数的扩展

    ES6对函数的扩展函数蛮多的,不过常用的估计也就是默认值和箭头函数了。 函数参数默认值: 估计很多人都这样用过默认...

  • ES6基础笔记二

    ES6 箭头函数、函数扩展 ES5: function add(a,b){return a+b;}console....

  • ES6扩展归纳

    ES6扩展归纳 介绍ES6相比与ES5在原有对象上的扩展,包括字符串、正则、数值、函数、数组、对象等扩展,本文是阮...

  • ES6&函数扩展

    ES6函数的扩展 1.函数默认值 定义:ES6允许为函数设定默认值,即直接写在参数定义的后面 示例function...

网友评论

    本文标题:ES6之函数的扩展

    本文链接:https://www.haomeiwen.com/subject/tocmnqtx.html