js调用栈分析

这篇具有很好参考价值的文章主要介绍了js调用栈分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

s调用栈

执行上下文:执行上下文就是当前js代码被解析和执行所在环境的抽象的概念(执行环境)

js中的任何代码都是在执行上下文中执行的

js的执行环境:JS代码运行起来,执行上下文

js的执行上下文分为三种:

全局上下文:默认的他是最基础的执行上下文

创建全局对象

将this指向全局对象对象

函数执行上下文

每次调用函数,会为这个函数创建一个函数上下文

Eval函数

执行栈:调用栈

后进先出,用于存储嗲吗执行期间创建的所有上下文


const one = ()=>{

  two();

  console.log('我是one')

}

const two = ()=>{

  console.log('我是two')

}

one()

1.js引擎创建一个新的全局执行上下文,并将这个执行上下文推入到当前的执行栈中

执行栈用于:存储在代码执行期间创建期间的所有执行上下文

每当函数调用的时候,js引擎都会为该函数创建一个新的执行上下文并且push到当前执行栈的顶端

当调用one函数时,js引擎会为这个函数创建一个新的函数执行上下文并将其推到当前执行栈的栈顶

当调用two函数时,js引擎又会创建一个新的函数执行上下文,并将其推到栈顶,执行完成后,从栈顶弹出,上下文的控制权会交给栈顶的one函数

继续执行调用栈的代码one函数,执行完成后将one函数从栈顶弹出。

函数调用的本质就是压栈与出栈

递归:自己调用自己

递归调用,递归栈 先进后出

先进栈,到条件后再出栈,就会导致栈溢出

尾调用:函数最后一句代码调用函数

尾递归:函数最后一步调用自己

递归非常消耗内存:每次调用都会重复前面的步骤

优化:可以将之前计算结果进行保存,当做参数传入。文章来源地址https://www.toymoban.com/news/detail-625416.html

function fib(n){
  if(n<=2)return 1;
  return fib(n-1)+fib(n-2)
}

function fib1(n,t1=1,t2=1){
  if(n<=2)return t2;
  console.log(n,t2)
  return fib1(n-1,t2,t1+t2)
}

//阶乘
function jc(n){
  if(n===1)return 1;
  return n*jc(n-1);
}
function jc1(n,total=1){
  if(n===1)return total;
  return jc(n,n*total);
}
//  console.time('jc');
//  console.log(jc(10))
//  console.timeEnd('jc');
// console.time('jc1');
// console.log(jc1(10))
// console.timeEnd('jc1');

console.log(fib1(5))

到了这里,关于js调用栈分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构与算法--javascript(持续更新中...)

    1. 数据结构 队列: 一种遵循 先进先出 (FIFO / First In First Out) 原则的一组有序的项;队列在尾部添加新元素,并从头部移除元素。最新添加的元素必须排在队列的末尾。 (例如:去食堂排队打饭,排在前面的人先打到饭,先离开;排在后面的人后打到饭,后离开。) 栈: 一

    2024年02月16日
    浏览(24)
  • 数据结构与算法之查找: 顺序查找 (Javascript版)

    顺序查找 思路 遍历数组 找到跟目标值相等元素,就返回它的下标 没有找到,返回-1 算法实现 总结 非常低效,算是入门搜索 时间复杂度:O(n) 对于数组结构或链表结构而言,没什么太多可说的

    2024年02月05日
    浏览(39)
  • 数据结构与算法之排序: 计数排序 (Javascript版)

    排序 排序:把某个乱序的数组变成升序或降序的数组 (这里用数组来做举例) 计数排序 核心思想 :通过计数而非比较来进行排序,借助数组下标本身就是有序的原理实现 适用范围:较小的非负整数序列和最小值和最大值之间的数字范围比较合适 基数排序需要新增一个计数数

    2024年02月06日
    浏览(28)
  • JavaScript(ES6)数据结构与算法之树

    6.1 概念 非线性结构 n(n=0)个节点构成的有限集合,n=0时称为空树 对于任一非空树 有一个根节点 其余节点可以构成子树 树的术语: 节点的度 :节点的子树个数 树的度 :树所有节点中最大的度数 叶节点 /叶子节点:度为零的节点 父节点:有子树的的节点是子树根节点的父节

    2024年02月04日
    浏览(28)
  • 数据结构与算法之LRU: 实现 LRU 缓存算法功能 (Javascript版)

    关于LRU缓存 LRU - Lease Recently Used 最近使用 如果内存优先,只缓存最近使用的,删除 ‘沉睡’ 数据 核心 api: get set 分析 使用哈希表来实现, O(1) 必须是有序的,常用放在前面,沉睡放在后面, 即:有序,可排序 这样 {} 不符合要求;Map是可以排序的,按照设置顺序 不用 Map 如何

    2024年02月06日
    浏览(41)
  • 【JavaScript数据结构与算法】数组类(电话号码的字符组合)

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,也会涉及到服务端(Node.js) 📃 个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀 未来打算: 为中国的工业软件事业效力 n 年 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目

    2024年02月07日
    浏览(33)
  • JS-----数据结构与算法(2)

    目录 三. 栈结构 1.认识栈结构 2. 封装栈结构  3. 应用 3-1 十进制转二进制 3-2 进制转换法 四. 队列 1.队列是什么? 2.队列的封装  3. 队列的应用-击鼓传花 4. 双端队列 5.判断是否为回文 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性

    2024年02月15日
    浏览(24)
  • JS-----数据结构与算法(1)

    目录 一. 初识数据结构与算法 1. 常见的数据结构 2. 算法 二. 数组结构 数据类型分类 1 创建一个数组 2 数组的 length 3 数组的索引  4 数组的常用方法 数组常用方法之 push  数组常用方法之 pop 数组常用方法之 unshift 数组常用方法之 splice 数组常用方法之 reverse 数组常用方法之

    2024年02月15日
    浏览(18)
  • 数据结构与算法设计分析—— 数据结构及常用算法

    1、顺序表与链表 线性表是 线性结构 ,是包含n个数据元素的有限序列,通过顺序存储的线性表称为 顺序表 ,它是将线性表中所有元素按照其逻辑顺序,依次存储到指定存储位置开始的一块连续的存储空间里;而通过链式存储的 链表 中,每个结点不仅包含该元素的信息,还

    2024年02月07日
    浏览(43)
  • 【JavaScript数据结构与算法】字符串类(计算二进制子串)

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,也会涉及到服务端(Node.js) 📃 个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀 未来打算: 为中国的工业软件事业效力 n 年 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目

    2024年02月05日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包