美文网首页工作生活
ES6中的尾调优化

ES6中的尾调优化

作者: 依然还是或者其他 | 来源:发表于2019-07-02 10:42 被阅读0次

前言

在ES6的引擎优化中,改变了尾调用系统。
尾调用:
当一个函数的最后一个动作是返回一个函数的调用结果。——维基百科

在ES5中,尾调用就像其他函数调用一样:将调用的函数推送到调用栈。这意味为每个先前的栈帧都保存在内存中,在调用栈太大时会出现问题

在ES6中,只要满足以下条件,就可以清除并重用当前调用帧,而不是创建新的栈帧:
1.尾调用不需要访问当前栈中的变量,即该函数不是闭包
2.在尾调用返回后,进行尾调用的函数没有进一步的工作要做
3.尾调用的结果作为函数值返回

//常见的未优化的递归
function factorial(n) {
    if (n <= 1) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}


//递归的尾调优化
function factorial(n, p = 1) {
    if (n <= 1) {
        return 1 * p;
    } else {
        let result = n * p;
        return factorial(n - 1, result);
    }
}

但目前对于浏览器环境而言,尾调递归优化的不具有实际性。
因为各大浏览器厂商并没有部署尾调优化(除Safari)。
v8引擎虽然实现了尾调优化,但考虑到:
尾调用优化依旧有隐式优化和调用栈丢失的问题,
默认是不开启的,开发者也用不了。(详细请见参考的第二篇

参考文章:
https://github.com/nzakas/understandinges6/blob/master/manuscript/03-Functions.md
https://imweb.io/topic/5a244260a192c3b460fce275
http://kangax.github.io/compat-table/es6/

相关文章

  • 「JavaScript学习笔记」 尾递归优化

    reference ES6中的尾调优化及其他相关的优化算法

  • ES6中的尾调优化

    前言 在ES6的引擎优化中,改变了尾调用系统。尾调用:当一个函数的最后一个动作是返回一个函数的调用结果。——维基百...

  • JS 尾调优化

    概述 尾调 在说尾调优化(Tail Call Optimization,下文简称 TCO)前,先解释什么是尾调——...

  • 【ES6 笔记】函数:尾调用优化

    尾调用优化是ES6中在系统引擎优化上做的一个改进 概念:尾调用指的是函数作为另一个函数的最后一条语句被调用 问题:...

  • es6尾调用优化

    es6 严格模式下(非严格模式不受影响),满足一下三个条件,尾调用不再创建新的stack frame ,而是重用当...

  • 无人区玫瑰

    Byredo——无人区玫瑰 前调:粉红胡椒 玫瑰 中调:玫瑰 树莓花 尾调:纸莎草 琥珀 这支香尾调的温柔缱绻真的...

  • 什么是尾调用?什么是尾递归?尾调用的优化?尾递归优化?

    尾调用优化 尾递归(尾调用优化)

  • 递归调用优化

    尾递归优化 函数调用自身,称为递归。如果尾调用自身,就称为尾递归。 递归非常耗费内存,因为需要同时保存成千上百个调...

  • 关于ES6尾调用优化

    ES6包含了一个性能领域的特殊要求。这与一个涉及函数调用的特定优化形式相关:即尾调用优化(Tail Call Op...

  • 家常秋葵

    前调:猪油 姜 干辣椒 蒜 花椒 中调:盐 海椒 干贝 腊香肠 秋葵 尾调:味精

网友评论

    本文标题:ES6中的尾调优化

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