首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JS底层运行机制

想要了解JS底层运行机制,首先要明白这几个概念: 为什么js能在浏览器中执行 众所周知,计算机是有内存的,计算机会在内存中开辟一块空间去供js执行,这个空间我们称之为执行栈 全局对象和全局变量对象是一样的吗...全局变量对象,在script标签内的代码执行时,会形成EC(G)的栈,EC(G)进栈(执行环境栈,EC Stack)执行,形成全局执行上下文(VO(G)),供给下级作用域 js中上下文有哪些 全局上下文...执行上下文 为了进行区域划分,会形成不同的执行上下文,全局环境会形成全局执行上下文,函数执行会形成函数执行上下文,通过作用域链scope chain形成链式关系 举个例子,var a = 12在底层是如何执行的...这里需要对栈内存和堆内存有个基本的了解 引用类型的值是存放在堆内存当中的 基本数据类型,也就是值类型,这种值是存放于栈内存当中 对于var a = 12,在计算机底层是先看等号右边的值,是引用类型还是值类型...底层运行机制(成哥版,腾讯课堂有免费公开课) 函数都是对象,对象身上就会有属性,有的属性可以访问,有的属性不能直接访问 函数执行多次会生成多个上下文,每个执行上下文都是独一无二的,函数执行完,执行上下文被销毁

1.9K10

JS运行机制

本文阐述了浏览器端和node端的js运行机制执行的过程,还进行了两者的运行机制比较,以及同步任务和异步任务的说明,两种异步任务的必要性,以及各自有哪些回调,部分回调的优先级。...JS运行机制复述 首先js执行,会有一个函数执行栈(stack),一个任务队列(task queue),一个微任务队列(microtask queue),事件循环(event loop)。...浏览器和Node端事件循环的差别 两者的运行机制完全不同,实现机制也不同。 node.js可以理解成4个宏任务队列(timer、I/O、check、close)和2个微任务队列。...node.js在开始宏任务6个阶段时,每个阶段都将该宏任务队列中所有任务都取出来执行,每个阶段的宏任务执行完毕后,开始执行微任务。...JS异步任务 js的异步任务分为两种:宏任务、微任务。一个宏任务里面可以拥有多个微任务,在执行js代码块的时候才会去执行内部的微任务。 宏任务 macrotask,也叫tasks。

3.7K30
您找到你想要的搜索结果了吗?
是的
没有找到

JS运行机制

代码块: JS中的代码块是指由标签分割的代码段。JS是按照代码块来进行编译和执行的,代码块间相互独立(即就算代码块1出错,但不影响代码块2的加载和执行),但变量和方法共享。...的加载原理: 在加载HTML页面的时候,当浏览器遇到内嵌的JS代码时会停止处理页面,先执行JS代码,然后再继续解析和渲染页面。...由于现代浏览器都允许并行下载JS文件,因此标签在下载外部资源时不会阻塞其他的标签。遗憾的是JS下载过程仍然会阻塞其他资源的下载。...JavaScript的任务列队: JS任务可以分为两种:一种是同步任务,另一种是异步任务。注意,只有主线程空了,才会去读取"任务队列",这就是JS运行机制,这个过程会不断重复。...定时器功能主要由setTimeout()和setInterval()这两个函数来完成,它们的内部运行机制完全一样,区别在于前者指定的代码是一次性执行,后者则为反复执行。

2.4K20

JS ----- 底层原理

JS不是这样做的,JS是不需要编译成中间码,而是可以直接在浏览器中运行,JS运行过程可分为两个阶段,编译和执行。...(可参考你不知道的JS这本书),当JS控制器转到一段可执行的代码时(这段可执行代码就是编译阶段生成的),会创建与之对应的执行上下文(Excution Context简称EC)。...执行上下文可以理解为执行环境(执行上下文只能由JS解释器创建,也只能由JS解释器使用,用户是不可以操作该"对象"的)。...JS底层运行原理 每调用一个函数就会生成一个执行环境(俗称执行上下文),执行上下文环境数量没有限制 每调用一个函数就会生成一个执行环境(俗称执行上下文),执行上下文环境数量没有限制 单线程 同步执行...eval():把字符串单做JS代码执行,不推荐使用

2K10

「硬核JS」一次搞懂JS运行机制

前言 本文首发于掘金,PC端点击文章末尾阅读原文观看体验更好 从开始做前端到目前为止,陆续看了很多帖子讲JS运行机制,看过不久就忘了,还是自己理一遍好些 通过码字使自己对JS运行机制相关内容更加深刻(...了 从零到一百再到一,从多方面了解JS运行机制,体会更深刻,请认真读下去 本文大致分为以下这样的步骤来帮助我们由广入深更加清晰的了解JS运行机制 首先我们要了解进程和线程的概念 其次我们要知道浏览器的进程线程常识...运行机制在平常前端面试时不管是笔试题还是面试题命中率都极高 说到JS运行机制,你知道多少 看到这大家可能会说:JS运行机制嘛,很简单,事件循环、宏微任务那点东西 是的,作为一名前端我们都了解,但是如果这真的面试问到了这个地方...,你真的可以答好吗(灵魂一问️) 不管你对JS了解多少,到这里大家不防先停止一下阅读,假设你目前在面试,面试官让你阐述下JS运行机制,思考下你的答案,用20秒的时间(面试时20s已经很长了),然后带着答案再接着往下看...聊聊浏览器的渲染机制 https://segmentfault.com/a/1190000004292479 从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理 https://juejin.im

1.8K10

hashmap低层原理(js底层原理)

HashMap底层就是一个数组结构,数组中的每一项又是一个链表。数组+链表结构,新建一个HashMap的时候,就会初始化一个数组。...Entry就是数组中的元素,每个Entry其实就是一个key-value的键值对,它持有一个指向下一个元素的引用,这就构成了链表,HashMap底层将key-value当成一个整体来处理,这个整体就是一个...HashMap底层采用一个Entry【】数组来保存所有的key-value键值对,当需要存储一个Entry对象时,会根据hash算法来决定在其数组中的位置,在根据equals方法决定其在该数组位置上的链表中的存储位置...HashMap时,它才会给HashMap分配16个键值对的存储空间,(负载因子为0.75,阈值为12),当16个键值对已经存储满了,我们在添加第17个键值对的时候才会发生扩容现象,因为前16个值,每个值在底层数组中分别占据一个位置

1.8K20

Go 语言 Web 编程系列(二)—— HTTP 请求处理的底层运行机制

1、工作流程 客户端发起的 HTTP 请求是通过 Go 语言实现的 HTTP 服务器监听、接收、处理并返回响应的,这个 HTTP 服务器底层工作流程如下: 创建 Listen Socket,监听指定的端口...2、更进一步 有关处理器绑定的路由与对应方法的实现细节,我们后面介绍路由、请求、表单、响应、视图等实现时会详细介绍,这里我们先将注意力放到 http.ListenAndServe 这行代码,看看底层到底做了些什么...关于这个方法的使用我们在 HTTP 编程之 HTTP/HTTPS 请求处理这篇教程中已经简单介绍过,这里,我们更深入系统的研究下底层的处理逻辑。...处理客户端请求并返回响应 接下来,我们进入 conn 实例的 serve 方法源码,看看底层如何将 HTTP 请求分配给指定处理器方法进行处理。...对于 Go Web 应用 HTTP 请求的底层处理,学院君就简单介绍到这里,你最好结合源码来阅读和理解,下一篇,我讲给大家介绍如何在 Go Web 应用中快速实现路由器。

1.3K20

揭秘 Node.js 底层架构

,应用越来越广,出现了繁荣的 Node.js 生态 借助 Node.js 走出浏览器之后,JavaScript 语言也一发不可收拾: Any application that can be written...二.Node.js 架构概览 JS 代码跑在 V8 引擎上,Node.js 内置的fs、http等核心模块通过 C++ Bindings 调用 libuv、c-ares、llhttp 等 C/C++类库...为迈出浏览器世界的 JavaScript 长上了手脚 五.C++ Bindings 在核心模块之下,有一层 C++ Bindings,将上层的 JavaScript 代码与下层 C/C++类库桥接起来 底层模块为了更好的性能...另一方面,通过 Bindings 也可以复用可靠的老牌开源类库,而不必手搓所有底层模块 以文件 I/O 为例,读取当前 JS 文件内容并输出到标准输出: // readThisFile.js const...),到号的顾客订单会被传给经理(libuv),经理将订单分配给咖啡师(worker 线程),咖啡师用不同的原料和工具(底层依赖的 C/C++模块)来制作订单要求的各种咖啡,一般会有 4 个咖啡师值班,高峰时候可能会增加一些

2.2K10

Node.js底层原理

前言:之前分享了 Node.js底层原理,主要是简单介绍了 Node.js 的一些基础原理和一些核心模块的实现,本文从 Node.js 整体方面介绍 Node.js底层原理。...定时器 Libuv 在底层里面维护了一个最小堆,每个定时节点就是堆里面的一个节点(Node.js 只用了 Libuv 的一个定时器节点),越早超时的节点就在越上面。...现在有一个底层能力,那么这个底层能力是怎么暴露给上层的 JS 去使用呢?这种时候就需要用到 JS 引擎 V8了。 3. Node.js 中的 V8 下面从三个方面介绍 V8。 1....现在有了底层能力,有了这一层的接口,但是我们是怎么去加载后执行 JS 代码呢?这时候就需要模块加载器。 4 Node.js 中的模块加载器 Node.js 中有五种模块加载器。 1....现在有了底层的能力,也有了这一次层的接口,也有了代码加载器。最后我们来看一下 Node.js 作为一个服务器的时候,它的架构是怎么样的?

96540

Node.js底层原理

前言:本文根据最近做的一次分享整理而成,希望能帮忙大家深入理解Node.js的一些原理和实现。 大家好,我是一名Node.js爱好者,今天我分享的主题是Node.js底层原理。...我们看到底层的实现稍微简单,但是Node.js的定时器模块实现就稍微复杂。 ? 1 Node.jsjs层维护了一个二叉堆 2 堆的每个节点维护了一个链表,这个链表中,最久超时的排到后面。...3 另外Node.js还维护了一个map,map的key是相对超时时间,值就是对应的二叉堆节点。 4 堆的所有节点对应底层的一个超时节点。...必要的时候,Node.js会根据js二叉堆的最快超时时间来更新底层节点的超时时间。...当事件循环处理定时器阶段的时候,Node.js会遍历js二叉堆,然后拿到过期的节点,再遍历过期节点中的链表,逐个判断是否需要执行回调。必要的时候调整js二叉堆和底层的超时时间。

1.9K20

「硬核JS」图解Promise迷惑行为|运行机制补充

前些天有几个小伙伴看了我很早之前写的 「硬核JS」一次搞懂JS运行机制 后私信给我提出了疑问,说是运行机制是懂了,可是涉及到 Promise 的种种迷惑行为(各种嵌套输出、链式 then 等等)还是不太懂...Promise+运行机制的各种迷惑行为。...JS运行机制简述 在开始之前,还是有必要简单介绍下 JS运行机制。...❝简单回顾,详细请看 「硬核JS」一次搞懂JS运行机制 ❞ Promise手写实现 由于后面涉及到了一些 Promise 内部的运行机制,所以,这部分手写 Promise 请耐心看完,不多,只有核心部分...看得懂最好了,看不懂也没必要懊恼,只要理解 JS运行机制以及 Promise 的核心概念对一些简单的执行顺序可以做出准确的分析即可,本文的内容对实际开发帮助不大,因为真的不敢想象开发中如果出现了这种基于复杂的调用顺序而写的代码是一件多么糟糕的事情

2.2K30

JavaScript·从浏览器解析 JS 运行机制

从浏览器解析 JS 运行机制 进程与线程 对于进程和线程,可以比喻为工厂和工人 进程是一个工厂,工厂有它的独立资源(系统分配的独立一块内存) 工厂之间相互独立(进程之间相互独立) 线程是工厂中的工人,多个工人协作完成任务...JS 引擎线程是互斥的,所以如果 JS 执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞 事件触发线程 归属于浏览器而不是 JS 引擎,用来控制事件循环(可以理解,JS 引擎自己都忙不过来...Event Loop 从这里终于讲到了本文最核心的部分:JS运行机制。...microtask:Promise,process.nextTick(在 node 环境下,process.nextTick 的优先级高于 Promise) 最后总结下 macrotask 与 microtask 的运行机制...线程继续接管,开始下一个宏任务(从事件队列中获取) 参考文章: 从浏览器多进程到 JS 单线程,JS 运行机制最全面的一次梳理

79020

进阶 | JS运行机制最全面的一次梳理!

前端爱好者的聚集地 最近发现有不少介绍JS单线程运行机制的文章,但是发现很多都仅仅是介绍某一部分的知识,而且各个地方的说法还不统一,容易造成困惑。...因此准备梳理这块知识点,结合已有的认知,基于网上的大量参考资料, 从浏览器多进程到JS单线程,将JS引擎的运行机制系统的梳理一遍,欢迎转发!...普通图层和复合图层 从Event Loop谈JS运行机制 事件循环机制进一步补充 单独说说定时器 setTimeout而不是setInterval 事件循环进阶:macrotask与microtask...的运行机制 到此时,已经是属于浏览器页面初次渲染完毕后的事情,JS引擎的一些运行机制分析。...同时,也应该注意到了JS根本就没有想象的那么简单,前端的知识也是无穷无尽,层出不穷的概念、N多易忘的知识点、各式各样的框架、 底层原理方面也是可以无限的往下深挖,然后你就会发现,你知道的太少了。。。

54330
领券