js执行思维导图

备注:

js执行:   执行分为两部分:预执行和执行
                预执行:创建好执行上下文
                执行:执行栈中执行
js引擎:   读取并执行js
                各个浏览器的引擎如下
                chrome,v8
                firefox,spidermonkey
                ie,chakra
                safari,nitro/javascriptcore
                opera,carakan

js单线程:js引擎执行js时只分了一个线程给它执行

                说到线程,我们先说进程,比如浏览器就是一个进程,打开浏览器网页时,发送请求,                   接手请求,渲染页面,执行js等等就是一个个线程

                那为什么js是单线程呢,为什么不是多线程;比如一个线程增加dom,另外一个删除dom
                而单线程会造成堵塞

执行栈:先进后出,栈顶的执行上下文获得执行权,并按顺序执行当前上下文中的代码,执行完                  后弹栈销毁上下文,执行权交给下一个栈顶执行上下文

执行上下文:执行上下文的生命周期:变量对象VO,作用域链,this值

执行环境:执行环境中包含三部分:变量对象/活动对象,作用域链,this的值

全局执行环境:this指向window

函数执行环境:如果嵌套函数作为方法调用,其this指向调用它的对象
                         如果嵌套函数作为函数调用,其this值指向window(非严格模式),或undefined(严格模式)

活动对象:初始化arguments

初始化函数fn:函数fn有个私有属性[[scope]],在全局作用域中定义的函数,会被初始化为当前的全局作用域,即fn.[[scope]] = "globalScope"

调用:创建函数fn执行上下文,同时创建作用域链fn.scopeChain = [fn.[[scope]]],此时作用域链有全局作用域

函数fn的活动对象AO被初始化后,把它作为变量对象推入作用域前端,此时fn.scopeChain=[fn.AO,fn.[[scope]]];此时作用域联众就有了当前活动对象和全局作用域,这就说明了为什么函数中能够访问到函数外部的变量

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/20623.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux学习[10]磁盘与文件系统(1):查看磁盘容量指令df 评估文件系统的磁盘使用量指令 du

文章目录 前言1. df指令2. du指令 前言 TF卡制作的过程中涉及到了磁盘分区格式化等问题,当时对具体的指令理解不是特别深刻;由此引申到我对linux中的整个磁盘与文件系统没有一个全面的认识,这个磁盘与文件系统的系列博客章节就对这些进行记录…

MySQL的主从复制与读写分离

一、MySQL主从复制 1、mysql支持的复制类型 STATEMENT∶基于语句的复制。在服务器上执行sql语句,在从服务器上执行同样的语句,mysql默认采用基于语句的复制,执行效率高。 ROW∶ 基于行的复制。把改变的内容复制过去, 而不是把命…

下载和安装appuploader

转载:下载和安装appuploader IOS开发工具官网地址 Appuploader home -- A tool improve ios develop efficiency such as submit ipa to appstore and manage ios certificate 最新版本已经优化了没支付688给apple的账号登录流程,无需再安装其他软件。…

微服务保护(线程隔离、降级、熔断)

线程隔离 线程隔离有两种方式实现: 线程池隔离信号量隔离 线程池隔离 假设服务A依赖于服务B和服务C,那么服务A就会分别对服务B和服务C创建线程池,当有请求进来时不会使用服务A本身的线程,而是到对应的线程池中取一个线程来调用feign的客户…

AMBER分子动力学模拟之TOP准备-- HIV蛋白酶-抑制剂复合物(1)

AMBER分子动力学模拟之TOP准备-- HIV蛋白酶-抑制剂复合物(1) 我们以HIV蛋白酶-抑制剂复合物为例子,跑Amber动力学模拟 下载1phv 从PBD下载文件:https://www.rcsb.org/ PDB文件预处理 我们以 “protein(water) ligandcomplex” 为例来说一下如何处…

力扣82删除排序链表中的重复元素 II:思路分析+代码实现+方法总结(三指针法快慢指针法【双指针】递归法)

文章目录 第一部分:题目描述第二部分:代码实现2.1 三指针法2.2 快慢指针法(双指针)2.3 递归 第一部分:题目描述 🏠 链接:82. 删除排序链表中的重复元素 II - 力扣(LeetCode&#xf…

ChatGPT热门资料汇总,绝对不割韭菜

前言 ChatGPT 的出现,AI圈子一下就热闹起来了,各个公司争先恐后地出自己的产品,百度的文心一言、谷歌的Bard、阿里的通义千问等等,有很多人借此机会已经赚到百万,很多卖课搞培训的都是互为合伙人,大家都懂…

如何注册appuploader账号​

如何注册appuploader账号​ 我们上一篇讲到appuploader的下载安装,要想使用此软件呢,需要注册账号才能使用,今​ 天我们来讲下如何注册appuploader账号来使用软件。​ 1.Apple官网注册Apple ID​ 首先我们点击首页左侧菜单栏中的“常见网…

【更新日志】填鸭表单TduckPro v5.1 更新

hi,各位Tducker小伙伴。 填鸭表单pro迎来了v5.1版本;本次我们进行了许多的功能新增和优化,能够让我们在日常使用中获得更好的体验。 让我们一起来康康新功能吧。 01 新增Pro功能 新增登录后才能填写表单。 新增表单卡片一键发布。 新增矩…

【STM32CubeMX】F103窗口看门狗

前言 本文记录了我学习STM32CubeMX的过程,方便以后回忆。我们使用的开发板是基于STM32F103C6T6的。本章记录了窗口看门狗的使用配置。要学习的话,注意流程一说,省略的内容。 基础 窗口看门狗(WWDG)属于APB1上外设。窗口看门狗(WWDG)的时钟源…

JUC并发编程16 | CAS自旋锁

CAS自旋锁 是什么,干什么,解决了什么痛点?如何解决,如何使用。 原子类:java.util.concurrent.atomic 在没有CAS之前,多线程环境不使用原子类保证线程安全i等操作,会出现数据问题,…

Day968.如何开启一个遗留系统现代化项目? -遗留系统现代化实战

如何开启一个遗留系统现代化项目? Hi,我是阿昌,今天学习记录的是关于如何开启一个遗留系统现代化项目?的内容。那如何启动一个遗留系统现代化项目。 一、项目背景 说来有点唏嘘,国内遗留系统的重灾区,恰恰…

WiFi(Wireless Fidelity)基础(八)

目录 一、基本介绍(Introduction) 二、进化发展(Evolution) 三、PHY帧((PHY Frame ) 四、MAC帧(MAC Frame ) 五、协议(Protocol) 六、安全&#x…

迪赛智慧数——柱状图(象形标识图):在选择另一半时,你更看重的是?

效果图 好看只排第六,第一确实众望所归!当代男女择偶标准出炉,一张图带你看清。 女性挑选另一半时,她们更看重伴侣收入高、职业体面、工作能力强、受教育程度高,还得和自己有共同话题。 男性择偶观和女性恰恰相反&am…

ctfshow周末大挑战2023/5/12

本周周末大挑战用到的函数讲解 parse_url() 作用:解析URL,返回其组成部分 语法: parse_url ( string $url [, int $component -1 ] ) 参数: url:要解析的 URL。无效字符将使用 _ 来替换。 component: …

软件测试月薪2万,需要技术达到什么水平?

最近跟朋友在一起聚会的时候,提了一个问题,说一个软件测试工程师如何能月薪达到二万,技术水平需要达到什么程度?人回答说这只能是大企业或者互联网企业工程师才能拿到。也许是的,小公司或者非互联网企业拿二万的不太可…

Threejs进阶之十四:在uniapp中使用threejs创建三维图形

在uniapp中使用threejs 一、uni-app介绍二、新建uni-app项目三、安装three.js库四、在vue组件中引入three.js库五、创建场景(Scene)和相机(Camera)六、创建渲染器(Renderer)七、创建物体和灯光八、渲染场景(Scene)九、运行测试核心代码 一、uni-app介绍 uni-app是一个基于Vue.…

sqlserver 中的表值函数和标量函数

目录 一、表值函数 1.内联表值函数 1.创建函数 2.调用函数 3.返回结果 2.多语句的表值函数 2.调用函数 3.返回结果 3.内联表值函数和多语句的表值函数的区别 1.语法上 2.结构上 二、标量函数 1.创建函数 2.调用函数 2.返回结果 总结 一、表值函数 表值函数是返回一个Table类型…

如何使用jmeter进行压测

1.概述 一款工具,功能往往是很多的,细枝末节的地方也很多,实际的测试工作中,绝大多数场景会用到的也就是一些核心功能,根本不需要我们事无巨细的去掌握工具的所有功能。所以本文将用带价最小的方式讲解如何快速上手使用…

centos7.5离线安装部署TiDB-6.5.0分布式系统

centos7.5离线安装部署TiDB-6.5.0分布式系统 一、需求,为什么要部署TiDB-6.5.0分布式系统 当前绝大部分企业的业务数据都分散在不同的系统中,没有一个统一的汇总,随着业务的发展,企业的决策层需要了解整个公司的业务状况以便及时…