• 【深入理解ES6】函数


    箭头函数

    这是 ES6 中引入的一个有趣的新特性。箭头函数,顾名思义就是一种使用箭头(=>)定义的新语法,与传统函数的差别如下:

    1. 没有this、super、arguments和new.target绑定,他们由外围最近一层非箭头函数决定。
    2. 不能通过New关键字调用。箭头函数没有 construct 方法,所以不能用作构造函数。
    3. 没有原型,所以不存在 prototype 属性。
    4. 不可以改变this绑定,函数内部的this值不可以被改变,在函数生命周期内始终保持一致。
    5. 不支持arguments对象,箭头函数没有arguments绑定,所以必须通过命名参数和不定参数两种形势访问函数的参数。
    6. 不支持重复命名参数,传统函数只有在严格模式下才不能有重复命名的参数。

    箭头函数的语法:

    1. //加法
    2. var add = function(a,b){
    3. return a+b;
    4. }
    5. var sum = (a,b)=>a+b;
    6. //排序的比较器
    7. var result = values.sort((a,b)=>a-b);

    其中箭头函数的参数为 ( => )左边括号的内容,右边为返回值。

    尾调用优化

    尾调用优化是ES6引擎的优化。之前的循环调用中,每一个未用完的栈帧都会被保存在内存中,当调用栈变得过大时程序会出现问题,例如爆栈。

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

    1. function doSomething(){
    2. return doSomethingElse();//尾调用
    3. }

    尾调用优化没有明确的语法,而是符合条件会自动优化。

    在ES6中如果满足以下条件,尾调用不再创建新的栈帧,而是清楚并重要当前栈帧。(因为在ES5之前需要)

    1. 尾调用不访问当前栈的变量(函数不能是一个闭包)
    2. 在函数内部,尾调用是最后一条语句。
    3. 尾调用的结果作为函数值返回。

    好处:
    尾调用可以帮助函数保持一个更小的调用栈,从而减少内存的使用,避免栈溢出错误,当程序满足条件时,引擎会自动对其优化。

    1. function factorial(n,p=1){
    2. if(n<=1){
    3. return 1*p;
    4. }else{
    5. let result = n*p;
    6. //优化后
    7. return factorial(n-1,result);
    8. }
    9. }

    无法优化的示例:

    1. "use strict"
    2. function doSomething(){
    3. //调用不在尾部无法优化.
    4. var Result = doSomethingElse();
    5. return Result;
    6. }
    7. function doSomething2(){
    8. var sum =1;
    9. fun = () =>num;
    10. //无法优化,闭包
    11. return func();
    12. }

    尾调用优化和函数的懒执行有异曲同工之妙,典型的案例就是斐波拉契数列。把时间复杂度从 N^2 下降到 N

  • 相关阅读:
    性能优化之window.onload
    node(一)
    【Mybatisplus】初识Mybatisplus+SpringBoot整合
    Servlet入门
    第六章《类的高级特性》第1节:static关键字的使用
    2022.11.30-----leetcode.895
    java架构知识点-中间件(学习笔记)
    【iOS开发-天气预报】网络请求基础应用
    ASM文件系统 数据如何写和读数据
    Linux利用源码包升级Nginx到1.23.1用以解决nginx安全漏洞问题
  • 原文地址:https://blog.csdn.net/m0_62811051/article/details/132741525