美文网首页
ES6学习-3.函数

ES6学习-3.函数

作者: Zip_Wang | 来源:发表于2018-01-26 14:53 被阅读11次

    1、函数形参的默认值

    在ES5中函数定义了参数,如果要设置默认值,则需要在函数内进行判断处理,例如:

    要进行判断然后给出相应的默认值

    而在ES6中,可以在函数形参中直接定义默认值,例如:

    这样就不用在函数内进行判断给与默认值

    2、默认参数影响arguments

    在ES5,非严格模式下,修改参数时,arguments也会跟着变,例如:

    在严格模式下,则不同,修改参数,arguments的值也不会变,例如:

    所以在ES6下面和ES5的严格模式下,arguments的行为是一样的,修改参数值,不会影响arguments的值。

    3、处理无命名参数

    在函数的命名参数前添加三个点(...)就表明这是一个不定参数,该参数为一个数组,包含着自它之后传入的所有参数,通过这个数组名即可逐一访问里面的参数。例如:

    这个方法就是可以把object复制一份

    需要注意的是:

    (1)每个函数最多只能声明一个不定参数,而且一定要放在所有参数的末尾。

    (2)不定参数不能用于对象字面量setter之中。

    4、展开运算符

    展开运算符其实跟不定参数基本相似。Math.max()方法返回两个参数中大的一个,那么怎么返回一个数组中最大的呢。在ES6中,就可以用下面代码:

    5、箭头函数

    箭头函数和传统函数有以下几点不同:

    (1)没有this、super、arguments和new.target绑定。

    (2)不能通过new关键字调用。

    (3)没有原型

    (4)不可以改变this的绑定。

    (5)不支持arguments对象。

    (6)不支持重复的命名参数。

    箭头函数一般的写法如下:

    创建立即执行函数表达式,例如:

    6、尾调用优化

    尾调用指的是函数作为另一个函数的最后一条语句被调用。

    在ES5中,尾调用函数会创建一个新的栈帧,推入调用栈,所以在循环调用的时候,相互不能释放,就可能导致调用栈越来越大。

    在ES6中,缩减了严格模式下的尾调用栈的大小,满足以下条件,尾调用不再创建新的栈帧,而是清除并重用当前栈帧:

    (1)尾调用不访问当前栈帧的变量

    (2)在函数内部,尾调用是最后一条语句

    (3)尾调用的结果作为函数值返回

    例如:

    doSomething这个方法就会进行优化

    下面的情况不会进行优化:

    所以一般尾调用优化用的最多的场景就是递归函数。递归的计算很大,那么优化就会很大。

    相关文章

      网友评论

          本文标题:ES6学习-3.函数

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