js执行上下文

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

需求

创造执行上下文,是为了把变量声明给保存下来,在执行时,好找到变量用

一见如故

  • 看代码要分执行前(构建执行上下文)和执行时去看
  • 执行上下文的组成
    1、词法环境:[全局对象]、scope、outer
    2、This Binding:提供this的访问
  • 构建执行上下文
    1、处理声明
    2、检查重复定义
    3、初步赋值

全局执行上下文

全局对象为window或者global
outer为null
This Binding指向window

构建全局执行上下文
1、处理声明
①找到全局中的var声明、顶级的全局函数声明(不在大括号内、不在函数中,以function开头的),并记录全局对象中
②找到顶级的let、const、class,记录到全局scope中,并记录这些标识符的位置,在此之前不允许赋值
2、检查重复定义
检查全局scope中的变量名在全局对象及全局scope中有没有重复出现,重复出现会报错
3、初步赋值(在代码执行时,访问一个没有被赋值的变量会报错)
①先给var申明的变量赋值为undefined
②再给函数标识符赋值一个函数对象,其中属性包含:
prototype、name(函数名)、length(形参长度)、arguments、[[scope]]
函数对象的隐式属性scope指向栈顶执行上下文

函数执行上下文

  • '函数对象’是在函数声明时产生的,函数对象有个隐式的[[scope]]属性,指向当前栈顶的执行上下文
  • '函数的执行上下文’包含scope、outer、this binding,是在函数执行的前一刻生成的。并直接压入执行上下文栈顶,函数执行结束,弹出栈顶
  • 如果在当前执行上下文的scope中找不到变量,就沿着outer找,outer指向函数对象的[[scope]]

for循环中的执行上下文

// 使用let的话,小括号和大括号都会生成各自的执行上下文
// 当前执行上下文中找不着,就沿着链找,就会找到小括号中的i
for(let i; i< 5;i++){
	setTimeout(function(){
		console.log(i)
	},0)
}
// 0,1,2,3,4
// 使用var的话,var声明的变量在全局对象中
for(var i; i< 5; i++){
	setTimeout(function(){
		console.log(i)
	},0)
}
// 5,5,5,5,5

函数中的this

一、指向函数执行上下文的this binding,默认是window,但是改变
1、隐式绑定this(对象’.'的方式)
2、显示绑定this(call、apply)
二、在开发中this为什么难:
在框架中函数多出现以回调的模式,所以它去怎么绑定this的,我们并不知道
三、箭头函数的执行上下文没有this binding,所以没法绑定this,没法new,它会去找其作用域链中的this文章来源地址https://www.toymoban.com/news/detail-431775.html

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

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

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

相关文章

  • JavaScript中的执行上下文和执行栈

    执行上下文是评估和执行JavaScript代码环境的抽象概念,但我们在JavaScript中所做的声明变量,声明函数,执行函数。他们都是在执行上下文中运行,也有了所谓的作用域。 执行上下文分为三种类型,例如全局申明挂到window下的变量就是全局执行上下文; 函数被调用时创建的上

    2023年04月24日
    浏览(33)
  • 从 ECMAScript 6 角度谈谈执行上下文

    大家好,我是归思君 起因是最近了解JS执行上下文的时候,发现很多书籍和资料,包括《JavaScript高级程序设计》、《JavaScript权威指南》和网上的一些博客专栏,都是从 ES3 角度来谈执行上下文,用ES6规范解读的比较少,所以想从ES6的角度看一下执行上下文。 下面我尝试用E

    2024年02月04日
    浏览(28)
  • 〖大前端 - 基础入门三大核心之JS篇(51)〗- 面向对象之认识上下文与上下文规则

    说明:该文属于 大前端全栈架构白宝书专栏, 目前阶段免费 , 如需要项目实战或者是体系化资源,文末名片加V! 作者:哈哥撩编程,十余年工作经验, 从事过全栈研发、产品经理等工作,目前在公司担任研发部门CTO。 荣誉: 2022年度博客之星Top4、2023年度超级个体得主、谷

    2024年02月05日
    浏览(43)
  • 深入理解JavaScript堆栈、事件循环、执行上下文和作用域以及闭包

    在JavaScript中,内存堆是内存分配的地方,调用栈是代码执行的地方。 原始类型的保存方式:在变量中保存的是值本身,所以原始类型也被称之为值类型。 对象类型的保存方式:在变量中保存的是对象的“引用”,所以对象类型也被称之为引用类型。 调用栈理解非常简单,当

    2024年02月03日
    浏览(38)
  • JS引擎中的线程,事件循环,上下文

      线程 浏览器中有哪些进程呢? 1.浏览器进程:浏览器的主进程,负责浏览器的界面界面显示,与用户交互,网址栏输入、前进、后退,以及页面的创建和销毁。 2.渲染进程(浏览器内核):默认一个tab页面一个渲染进程,主要的作用为页面渲染,脚本执行,事件处理等。 3.

    2024年02月08日
    浏览(82)
  • js中this关键字的作用和如何改变其上下文

    一、this 的作用 JavaScript 中的 this 引用了所在函数正在被调用时的对象。在不同的上下文中, this 的指向会发生变化。 在全局上下文中, this 指向全局对象(在浏览器中是 window 对象,在 Node.js 中是 global 对象)。 在函数中, this 指向调用该函数的对象。如果该

    2024年02月07日
    浏览(32)
  • 【二开】JeecgBoot-vue3二次开发 前端 扩展online表单js增强等-在表单里拿到列表上下文onlineTableContext

    【二开】JeecgBoot-vue3二次开发 前端 扩展online表单js增强等-在表单里拿到列表上下文 对应的属性方法 acceptHrefParams \\\"p 跳转时获取的参数信息\\\" currentPage \\\"p 当前页数\\\" currentTableName \\\"p 当前表名\\\" description \\\"p 当前表描述\\\" hasChildrenField \\\"p 是否有子节点的字段名,仅树形表单下有效\\\" is

    2024年02月15日
    浏览(34)
  • 超长上下文处理:基于Transformer上下文处理常见方法梳理

    原文链接:芝士AI吃鱼 目前已经采用多种方法来增加Transformer的上下文长度,主要侧重于缓解注意力计算的二次复杂度。 例如,Transformer-XL通过缓存先前的上下文,并允许随着层数的增加线性扩展上下文。Longformer采用了一种注意力机制,使得token稀疏地关注远距离的token,从而

    2024年02月13日
    浏览(40)
  • 无限上下文,多级内存管理!突破ChatGPT等大语言模型上下文限制

    目前,ChatGPT、Llama 2、文心一言等主流大语言模型,因技术架构的问题上下文输入一直受到限制,即便是Claude 最多只支持10万token输入,这对于解读上百页报告、书籍、论文来说非常不方便。 为了解决这一难题,加州伯克利分校受操作系统的内存管理机制启发,提出了MemGPT。

    2024年02月06日
    浏览(47)
  • CPU上下文切换

    CPU 上下文切换,就是先把前一个任务的 CPU 上下文(也就是 CPU 寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务。 CPU 的上下文切换就可以分为几个不同的场景,也就是进程上下文切换、

    2024年02月14日
    浏览(28)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包