执行上下文和调用堆栈

执行上下文和调用堆栈

为顶级代码创建全局执行上下文,即不在任何 fn 内的代码。因此,首先执行 fn 之外的代码。
fn-decln/exprsn 的 fn 主体内的代码仅在调用时执行。

执行上下文(ec)

一段js执行的环境。
存储一些要执行的代码的所有必要信息,例如局部变量、传递给 fn 的 args。
js 代码始终在 ec 内运行。
无论 js 项目有多大,都只有一个全局 ec。
默认上下文,为不在任何 fn 内的代码创建。
然后代码在全局ec内部执行
顶层代码执行完毕后,执行fns并等待c/bs
对于每个 fn 调用,都会创建一个新的 ec 来执行该 fn。方法也是如此,因为它们也是附加到对象的 fns。
所有这些 ec 共同构成了调用堆栈。
当所有 fns 执行完毕后,引擎等待 cb 到达并执行它们。前任。点击事件回调,由事件循环提供。

ec里面有什么

变量环境由组成let、const、var 声明功能

arguments 对象:将传递给 fn 的所有参数存储在其 ec 中。
每个 fn 都有自己的 ec 作为其名称。声明的变量最终位于变量环境中

范围链:
fns 可以使用作用域链访问 fns 之外的变量。
包含对当前 fn 外部变量的引用并跟踪作用域链,它存储在每个 ec 中。

每个 ec 还获得 ‘this’ 关键字。

以上三个都是在执行之前的“创建阶段”生成的。这些是在顶层运行代码所必需的。

对于箭头 fns ec:

我们不会有:arguments 对象、this 关键字。箭头 fn 使用最接近的常规 fn,即上述两个。

参数:类数组对象,包含传递到常规 fn 的所有参数,而不是箭头 fn。

Eclipse下的Android Eclipse下的Android

本文档主要讲述的是Eclipse下的Android-NDK安装;Android NDK 是运行于Android 平台上的Native Development Kit 的缩写。Android 应用开发者可以通过NDK 调用C 或C++ 本地代码。NDK 编译需要用到Cygwin 中的make 和gcc, 所以先来下载并安装Cygwin。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

Eclipse下的Android 0 查看详情 Eclipse下的Android

调用栈+内存堆=js引擎

调用栈

ec 相互堆叠的地方,以跟踪我们在执行中的位置。最顶层的 ec 是我们正在运行的 ec。当执行结束时,它会从栈顶移除,控制权会转移到底层 ec。
如果存在嵌套的 fn 调用,由于 js 只有一个执行线程,因此会暂停外层 fn 调用,以便在调用堆栈上返回内层 fn 的执行结果。现在上一个 ec 将成为活动 ec
然后最顶层的 ec 在返回时从调用堆栈中弹出。
调用堆栈中最低的将是全局 ec,最上面的将是按顺序发生的 fn 调用。
确保执行顺序永远不会丢失。
最终程序完成,全局ec也会从call stack中弹出。

js 代码在 ec 内部运行,ec 放置在 call stack 上。

hence, we can say that each ec has:1. variable environment2. scope chain3. 'this' keyword

范围界定

js 引擎如何组织和访问我们的程序变量。
变量存在于哪里
我们在哪里可以访问某些变量,哪里不能。

词汇范围:

js 具有 leical 作用域,这意味着作用域是通过代码中 fns 和块的放置来控制的。
前任。嵌套的 fn 可以访问其父 fn 的变量。

范围:

声明某个变量的空间或环境(fns 中的变量环境)。它是存储在 fns ec 中的变量 env。
对于 fns,var env 和scope 都是相同的。

three scopes in js are:1. global scope2. fn scope3. block scope [es6]

作用域是声明变量的地方。因此,对于 fns 来说也是如此,因为 fns 只是存储在变量中的值。

变量的范围

可以访问某个变量的代码区域。

作用域与变量的作用域有细微的差别。

## global scope:for top level codefor variables declared outside of any fn or block which are accessible from everywherevariables in this scope are at the top of scope chain. hence, can be used by every nested scope.
## fn scope:each fn has creates its own scopevariables are accessible only inside fn, not outside. else reference erroralso called local scopefn decln, exprsn, arrow all three create their own scopes.only way to create scope using es5 which had only fn & global scope.
## block scope:introduced in es6, not only fn but {} also create a scope known as block scope which work only for es6 variables i.e let-const types. doesn't work for variables declared with 'var' as its fn scoped.variables accessible only inside block i.e {} this only applies to variables declared with let-const only.fns are also block scoped in es6 (only in strict mode, should be used)variables declared using 'var' will be accessible outside the blockscoped to the current fn or the global scope.var variables only care about fn, they ignore blocks. they end up in nearest fn scope.

每个嵌套作用域都可以访问其外部作用域和全局作用域中的变量。同样也适用于 fn 参数。

如果 fn 在其作用域中找不到该变量,它将查找作用域链以找出其外部作用域中的变量。这个过程称为作用域链中的变量查找。反之则不行,即我们无法从 fn 或外部作用域之外访问嵌套的 fn 变量或作用域。
兄弟作用域无法访问彼此的变量
只有最内层的作用域可以访问其外层的作用域,反之则不然。

每个 fn 都有一个 ec,按照调用 fn 的确切顺序放置在调用堆栈上,其变量位于 ec 内。 global ec 位于调用堆栈的底部

范围链:
这完全取决于代码中 fns 的编写顺序。
与调用 fns 的顺序无关。
作用域链从 ec 获取变量环境。
fn 调用的顺序与作用域链完全无关。

const a = 'Alice';first();function first(){  const b = "Hello";  second();  function second(){    const c = "Hi";    third();  }}function third(){  const d = "Hey";  console.log(d + c + b + a); // Reference Error}## Call Stack order:third() EC - topsecond() ECfirst() ECglobal EC - bottomScope Chain:second() --nested inside--> first() --nested inside--> global scope.third() is independently defined inside gloabal scope.Reference Error occurred because both 'c' as well as 'b' cannot be accessed using the scope chain.

摘要:
e-c、var env、cl-sk、scope、scope-chain 都是不同但相关的概念。
范围界定询问变量存在于哪里、我们可以在哪里访问变量、在哪里不能访问变量等问题。
js 中的词法作用域:我们可以访问变量的规则完全基于代码中 fns 和块的写入位置。
每个作用域都可以访问其所有外部作用域的所有变量。这是范围链,是一条单向街道。外部作用域永远无法访问内部作用域的变量。
某个作用域的作用域链等于将所有父作用域的所有 var env 加在一起。
作用域链与 fns 的调用顺序无关。它根本不影响作用域链。
当在当前作用域中找不到变量时,引擎会查找作用域链,直到找到所需的变量。这称为变量查找。

以上就是执行上下文和调用堆栈的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/898577.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月28日 19:07:47
下一篇 2025年11月28日 19:08:14

相关推荐

  • 热门加密工具大全|一站式软件下载平台

    本文提供交易所官网直链、官方App的下载渠道,极大地降低了用户的时间成本和安全风险。 核心加密资产交易所官网地址及官方app下载链接 1. Binance 币安官网地址: 币安官方App下载链接: 作为全球交易量领先的平台,币安提供了极为广泛的加密货币交易对,覆盖了从主流币到新兴小众代币的各种资产,…

    2025年12月8日
    000
  • 跨链桥是什么 跨链桥的原理

    跨链桥是解决不同区块链孤岛效应的技术工具,其核心原理通过锁定原链资产、生成映射资产实现跨链流通。1. 跨链桥的基本逻辑分为三步:锁定原链资产、在目标链生成等价映射资产、反向解锁释放资产;2. 信任机制分为三类:中心化跨链桥依赖第三方机构,效率高但存在单点故障风险;去中心化跨链桥通过节点共识验证,安全…

    2025年12月8日
    000
  • 以太坊上有哪些知名的跨链桥项目?

    以太坊上有多个知名跨链桥项目,各具特色。1. Crosser:基于零知识技术,专为 Layer 2 性能优化,支持 Optimism、Arbitrum 等网络,具备快速、安全、低手续费及交易私密性;2. Synapse Protocol:去中心化跨链桥,简化区块链间资产流动,支持多种 Layer 1…

    2025年12月8日
    000
  • 稳定币十大龙头分别是 稳定币十大龙头股排名2025

    2025年稳定币十大龙头排名分别为USDT、USDC、DAI、FDUSD、Ethena USDe、TUSD、USDP、PYUSD、USDD和FRAX。 稳定币作为加密世界与现实世界法定货币之间的关键桥梁,为市场提供了重要的价值储存和交易媒介。本文将详细盘点当前市场中占据主导地位的十大稳定币,并深入分…

    2025年12月8日
    000
  • 介绍一下DAO组织的发展历史

    DAO 组织的发展历程是从理论设想走向实际应用并不断完善和多元化,具体表现为:1. 概念起源于 2006 年 Daniel Suarez 的《Daemon》,2013 年 Daniel Larimer 提出 DAC 概念,2014 年 Vitalik Buterin 正式提出 DAO 并奠定理论基础…

    2025年12月8日
    000
  • 比特币又创历史新高度,市场风险偏好明显升温

    比特币在科技股的带动下,首次突破11.2万美元大关,再次刷新历史纪录,年度涨幅接近20%。市场风险偏好显著上升,但短期内仍需关注宏观经济与政策变动对行情的影响。 比特币(Bitcoin)于台湾时间今日凌晨三点一度飙升至112,000美元以上,这是自5月22日以来再次打破历史高点。根据OKX数据显示,…

    2025年12月8日
    000
  • 稳定币是谁发行的 稳定币有哪几种

    稳定币是加密货币世界中不可或缺的基石,它通过与美元等稳定资产挂钩,有效解决了加密货币市场的价格波动问题。对于投资者而言,稳定币不仅是避险工具,更是连接传统金融与数字资产世界的关键桥梁,这篇文章将详细介绍稳定币的主要类型及其发行方。 2025年稳定币交易所: 欧易okx官网直达: 币安官网直达: 火币…

    2025年12月8日
    000
  • USDT、USDC、DAI有什么区别?

    选择一个安全可靠的加密货币交易所是新手和资深投资者进入数字资产世界的第一步。本文将为您盘点当前市场上的主流交易所,并详细解析三种最主要的美元稳定币usdt、usdc和dai之间的区别,帮助您做出更明智的决策。 2025年稳定币交易所: 欧易okx官网直达: 币安官网直达: 火币htx官网直达:  U…

    2025年12月8日
    000
  • 为何比特币与英伟达市值同创历史新高

    英伟达和比特币市值同创新高,反映了市场对人工智能和数字化价值储存的乐观情绪。1. 英伟达因在AI芯片领域的垄断地位,成为AI革命的核心受益者;2. 比特币受现货ETF获批和减半事件推动,逐步被主流投资市场接纳;3. 两者同步上涨的背后逻辑在于对计算能力的依赖及市场对科技创新的追捧,标志着AI重塑生产…

    2025年12月8日
    000
  • 什么是Stablechain(USDT的稳定链)?为什么USDT推出Stablechain?

    目录 什么是stablechain? Stablechain在Tether生态系统中的角色 USDT的Stablechain关键特性 Tether的Stablechain用例 为什么USDT推出自己的Stablechain? 常见问题 Stablechain与其他USDT网络有什么区别? Stabl…

    2025年12月8日
    000
  • 最有潜力的虚拟货币2025 如何寻找下一个百倍币

    要发现具备巨大潜力的数字资产,需从技术创新、团队背景、通证经济模型、社区活跃度及市场叙事五个维度系统评估。1. 技术创新与实际用途:项目应解决真实问题并带来技术突破;2. 团队背景与透明度:创始团队需经验丰富且公开透明;3. 通证经济模型:设计需激励长期持有而非短期抛售;4. 社区活跃度与生态系统:…

    2025年12月8日
    000
  • 什么是稳定币?3分钟看懂

    稳定币是一种特殊的加密货币,其价值与现实世界中的稳定资产(如美元)挂钩,旨在提供价格稳定性。它们就像是连接传统金融与加密世界的桥梁,让用户在享受区块链技术优势的同时,规避比特币等主流加密货币的剧烈价格波动。 2025年稳定币交易所: 欧易okx官网直达: 币安官网直达:   火币htx官网直达: 什…

    2025年12月8日
    000
  • 什么是代币化股票?如何运作的?它们安全吗?代币化股票深度指南

    目录 简单定义:现实世界股票的数字包装机制:代币背后的架构模型一:发行商-平台分离模型模型二:垂直整合的经纪商-发行商模型(Robinhood 方法)清晰的比较:代币化股票 vs. 传统股票 vs. 差价合约利与弊:现代投资者的平衡观点优点(优点)潜在风险(缺点)结论:投资的未来就在这里 传统金融 …

    2025年12月8日
    000
  • 加密货币最大的交易所是哪个?实力与争议全面解析

    币安(Binance)是目前最大的加密数字资产交易平台。1.从交易体量看,其24小时交易额远超其他平台,流动性深度领先;2.用户基础庞大,注册用户数突破一亿,带来显著网络效应;3.全球布局广泛,业务覆盖多数国家和地区;此外,币安拥有丰富的产品矩阵、强大的技术安全保障体系以及庞大的生态系统支持,但同时…

    2025年12月8日
    000
  • 排名前十的主流币有哪些?盘点2025全球十大主流虚拟货币

    2025年十大主流虚拟货币包括比特币、以太坊、币安币、索拉纳、瑞波币、卡尔达诺、雪崩协议、狗狗币、Chainlink和波卡。1. 比特币作为“数字黄金”凭借稀缺性和网络共识保持领先地位;2. 以太坊以智能合约为核心,支撑DeFi、NFT等应用持续发展;3. 币安币依托BNB链及广泛生态应用场景展现强…

    2025年12月8日
    000
  • 2025年值得关注的十大加密货币项目(最新更新)

    2025年值得关注的十大加密货币项目涵盖DeFi协议、Web3基础设施及NFT与元宇宙三大领域。1. DeFi协议方面,Compound (COMP) 凭借稳健治理和机构探索持续领先;Uniswap (UNI) 以集中流动性提升资金效率巩固优势;Aave (AAVE) 通过多链部署和现实资产代币化创…

    2025年12月8日
    000
  • Cardano的智能合约演变:Alonzo升级对2025年的影响

    cardano作为一个采用同行评审研究驱动的区块链平台,自诞生以来就致力于构建一个更具可扩展性、互操作性和可持续性的去中心化生态系统。其发展路线图被划分为多个时代(byron, shelley, goguen, basho, voltaire),每个时代都承载着平台演进的关键里程碑。其中,gogue…

    2025年12月8日
    000
  • 必知的 56 个币圈术语,拥抱加密货币新机遇

    掌握加密货币术语是理解这一新兴金融领域的关键。1. 区块链是加密货币的底层技术,具有去中心化、不可篡改和公开透明等特点;2. 加密货币是以密码学原理为基础的虚拟货币,如比特币、以太坊等;3. 存储用于存储私钥和公钥,分为热存储和冷存储;4. 私钥是访问加密货币资产的关键,需妥善保管;5. 公钥可公开…

    2025年12月8日
    000
  • 以太坊的可扩展性飞跃:第2层解决方案如何塑造未来

    以太坊第2层(L2)扩展解决方案通过链下处理交易显著提升效率并降低成本,主要方案包括1.Rollups(乐观Rollup和零知识Rollup)在L2执行计算、L1存储数据;2.状态通道适用于链下高频交互;3.侧链提供独立区块链与L1连接;L2通过批量处理交易、降低Gas费使微支付和高频交易成为可能;…

    2025年12月8日
    000
  • 稳定币怎样实现复利, reinvest收益还是提现更优?

    稳定币作为加密货币市场中的特殊存在,其价值通常锚定美元等法定货币,波动性极低,提供了相对稳定的价值储存手段。在数字资产领域,实现资产增值是许多参与者的目标,而利用稳定币进行复利操作,便是一种常见的策略。复利,即“利滚利”,将所产生的收益继续投入,从而使下一期计算利息的本金变大,实现资金的指数级增长。…

    2025年12月8日
    000

发表回复

登录后才能评论
关注微信