首页 > 编程语言 >[Javascript] Proper Tail Calls

[Javascript] Proper Tail Calls

时间:2024-08-07 19:27:32浏览次数:21  
标签:function acc return fatorial Javascript PTC calling Tail Proper

Docs: https://webkit.org/blog/6240/ecmascript-6-proper-tail-calls-in-webkit/

/*
This is a recursive function without PTC
*/
function fatorial(n) {
    if (n === 0) {
        return 1
    } else {
        return n * fatorial(n-1)
    }
}

console.log(fatorial(5)); // 120

/*
This is recursive function with PTC
*/
function fatorialPTC(n, acc = 1) {
    if (n === 0) {
        return acc
    } else {
        return fatorialPTC(n-1, n * acc)
    }
}
console.log(fatorialPTC(5)); // 120

 

The function with PTC will run much faster than without PTC.

PTC is defined as:

  • The calling function is in strict mode.
  • The calling function is either a normal function or an arrow function.
  • The calling function is not a generator function.
  • The return value of the called function is returned by the calling function.

标签:function,acc,return,fatorial,Javascript,PTC,calling,Tail,Proper
From: https://www.cnblogs.com/Answer1215/p/18347746

相关文章

  • JavaScript中的异步编程:Promise、async 和 await
    JavaScript中的异步编程:Promise、async和await在JavaScript中,Promise、async和await是处理异步操作的关键技术。这些技术允许开发者以更清晰、更可维护的方式编写异步代码,特别是在面对复杂的异步逻辑时。下面我会详细解释每个概念并展示它们是如何协同工作的。Prom......
  • JavaScript 数组方法
    JavaScript数组的力量隐藏在数组方法中。把数组转换为字符串JavaScript方法toString()把数组转换为数组值(逗号分隔)的字符串。join()方法也可将所有数组元素结合为一个字符串。它的行为类似toString(),但是您还可以规定分隔符<pid="demo"></p><script>varfruits......
  • JavaScript 中布尔值的创建
    <!DOCTYPEhtml><htmllang="en"><body><script> //CreateaBooleanobjectusingthenewkeywordandtheBoolean()constructor. varmyBoolean1=newBoolean(false);//Usingnewkeyword. console.log(typeofmyBoolean1);......
  • JavaScript (二十六)——JavaScript 代码规范
    目录JavaScript代码规范变量名空格与运算符代码缩进语句规则对象规则每行代码字符小于80命名规则HTML载入外部JavaScript文件文件扩展名所有的JavaScript项目适用同一种规范。JavaScript代码规范代码规范通常包括以下几个方面:变量和函数的命名规则......
  • Javascript——NaN有什么用法
    简介在JavaScript中,NaN(NotaNumber)是一个特殊的值,用来表示非数字的结果,例如一个不合法的数学运算的结果。根据IEEE754浮点数标准,NaN不等于任何值,包括它自己。这意味着NaN是唯一一个与自身不相等的值,所以表达式NaN===NaN返回false。判断NaN如果你需要检测一......
  • JavaScript 中的“this”几种不同含义
    在JavaScript中,“ this ”指的是当前正在执行代码的对象。其值由函数的调用方式动态确定,这意味着它可以根据上下文而变化。1.全球背景在全局上下文中(即任何函数或对象之外),“ this”指的是全局对象。在浏览器中,“ this”是窗口对象,而在Node.js中,它是全局对象。2.对象......
  • 【TS】 TypeScript声明文件:打通JavaScript和TypeScript的桥梁
     TypeScript声明文件的讲解: TypeScript声明文件(DeclarationFile)在TypeScript项目中具有举足轻重的地位,它是连接TypeScript严格的类型系统与外部无类型或类型不明确的JavaScript代码的关键纽带。 声明文件的核心价值在于为TypeScript编译器提供必要的类型信息......
  • JavaScript(二十二)——JavaScript this 关键字
    目录方法中的this单独使用this函数中使用this(默认)函数中使用this(严格模式)事件中的this对象方法中绑定显式函数绑定面向对象语言中this表示当前对象的一个引用。但在JavaScript中this不是固定不变的,它会随着执行环境的改变而改变。在方法中,this表示该方......
  • JavaScript 中的闭包和事件委托
    包(Closures)闭包是JavaScript中一个非常强大的特性,它允许函数访问其外部作用域中的变量,即使在该函数被调用时,外部作用域已经执行完毕。闭包可以帮助我们实现数据的私有化、封装和模块化,使代码更简洁、易读和可维护。闭包的定义简单来说,闭包是指有权访问另一个函数作......
  • 【Vitepress系列】-- 自定义组件及布局,配置tailwindcss、配置Markdown
    Vitepress自定义页面,以及配置tailwindcssvitepress中,除了使用一些配置项目,还可以通过写vue代码,来做一个定制化的UI。下面这个UI主页便是vue组件+tailwindcss做的一.自定义vitepress中,如果内置的home、doc、page不满足需求,还可以自己写vue代码进行自定义1.1自定义布......