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

JS代码是怎么被执行的

JS代码是怎么被执行的 我们看到的JS都是在浏览器中或者在Node环境中运行的对吧,那不论是浏览器还是Node,负责编译并且解释执行JS代码的都是一个叫做V8的东西,所以这个问题其实就是V8引擎是怎么去运行...,java和python也有自己的虚拟机实现,这些语言都将生成的字节码放在虚拟机上运行,相比于直接以机器码运行的语言,这些语言在损失了性能的同时又获得了更多功能上的遍历,然后我们回到V8引擎是如何执行JS...字节码是介于AST和机器码的一种代码,需要通过解释器转换成机器码后执行。...那么Ignition作为解释器,可以完成AST到字节码的转换过程并且担任解释执行的工作,为什么V8还需要TurboFan这个编译器呢,我们不是说Javascript是一种解释型语言吗?...实际上呢在现代的编程语言中解释型语言像JS为了功能上的需要,会引入JIT这样的技术 JIT (Just-In-Time)技术 通常,如果有一段第一次执行的字节码,解释器 Ignition 会逐条解释执行

3.1K40

能让 JS 执行的 JavascriptCore ,到底是啥

那它们是如何组合在一起的呢?往下看。 JSVirtualMachine:JS 虚拟机 JavaScript 代码在由 JSVirtualMachine 类表示的虚拟机中执行。...下图显示了上述每个部分之间是如何协同工作的: image.png 现在你对 JavaScriptCore 框架中已经有了初步的了解。接下来,我们来看看 IOS 代码与 JS 代码之间是如何调用的。...= context.evaluateScript(params); // 参数以字符串形式传入 通过 evaluateScript 执行的 JS 代码将会得到一个 JSValue 类型的值。...对于类遵循的每个协议,如果该协议包含 JSExport 协议,JavaScriptCore 会将该协议解释为要导出到 JavaScript 的方法和属性的列表。 那 JSExport 协议是什么呢?...JSExport是JavaScriptCore框架里的一个协议。如果一个协议遵守了JSExport,那么该协议的方法会对JS开放,允许JS直接调用)。

1.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    3分钟搞懂什么是编译执行和解释执行《轻松搞定大厂面试》

    语言属于XX型是呈现给大家的一个印象。 编程语言,是程序员们操控电脑以实现各种功能的主要方式,而解释执行与编译执行,是计算机编程语言的两种执行方式。...编译执行是直接将所有语句都编译成了机器语言,并且保存成可执行的机器码。执行的时候,是直接进行执行机器语言,不需要再进行解释/编译。...解释执行(解释器):在执行程序时,再将中间码(例如Java的字节码通过JVM解释成机器码)一行行的解释成机器码进行执行。这个运行过程是解释一行,执行一行。 执行编译过程的程序叫做编译器。...除了BASIC这样特别早期的解释型语言,是直接解释执行,现在的解释型语言都采取将代码编译为某种特定的虚拟机代码或者机器码的形式,然后再执行那些编译好的代码。...JavaScript可以被V8引擎编译为机器码然后执行,如果在node.js下,这个编译结果被缓存起来了,你说这跟编译好再执行的C有什么区别? 下篇预告 下篇讲讲Java中的解释执行和编译执行

    6.8K43

    Python解释器执行原理

    Python在执行时,首先会将.py文件中的源代码编译成Python的byte code(字节码), 然后再由Python Virtual Machine(Python虚拟机)来执行这些编译好的byte...这种机制的基本思想跟Java,.NET是一致的。...然而,Python Virtual Machine与Java或.NET的Virtual Machine不同的是, Python的Virtual Machine是一种更高级的Virtual Machine...这里的高级并不是通常意义上的高级,不是说Python的Virtual Machine比Java或.NET的功能更强大, 而是说和Java 或.NET相比, Python的Virtual Machine距离真实机器的距离更远...或者可以这么说,Python的Virtual Machine是一种抽象层次更高的Virtual Machine。 基于C的Python编译出的字节码文件,通常是.pyc格式。 ?

    1.2K30

    JS到底是怎么执行的:一文彻底搞清执行上下文

    然后,浏览器的JS引擎创建一个特殊的环境来处理这段JS代码的转换和执行。这个环境称为执行上下文。 执行上下文包含当前正在运行的代码,以及帮助其执行的所有内容。...由于每个函数调用都有自己的FEC,所以在脚本的运行时可以有多个FEC。 执行上下文是如何被创建的? 前面我们知道了什么是执行上下文,现在让我们看看执行上下文是如何被创建的。...,因为在本例中,函数可以访问的this关键字的值是定义函数的对象的值,而不是全局对象。 通过设置this关键字的值,就定义了执行上下文对象的所有属性。在创建阶段结束之前,现在JS引擎进入执行阶段。...JS 执行栈 执行堆栈,也称为调用堆栈,跟踪脚本生命周期中创建的所有执行上下文。 JavaScript是一种单线程语言,这意味着它一次只能执行一个任务。...执行上下文(GEC和FEC)和调用堆栈是在底层由JS引擎执行的进程,让我们的代码运行。 希望现在你看完本文可以更好地理解了函数/代码的执行顺序,以及JavaScript引擎如何处理它们。

    1.4K60

    谈谈你对 Java 平台的理解?“Java 是解释执行”,这句话正确吗?

    Java 本身是一种面向对象的语言,最显著的特性有两个方面,一是所谓的“书写一次,到处运行”(Write once, run anywhere),能够非常容易地获得跨平台能力;另外就是垃圾收集 (GC...而 JDK 可以看作是JRE 的一个超集,提供了更多工具,比如编译器、各种诊断工具等。 对于“Java 是解释执行”这句话,这个说法不太准确。...我们开发的 Java 的源代码,首先通过Javac 编译成为字节码(bytecode),然后,在运行时,通过 Java 虚拟机(JVM)内嵌的解释器将字节码转换成为最终的机器码。...,这种情况下部分热点代码就属于编译执行,而不是解释执行了。...AOT编译器: Java 9提供的直接将所有代码编译成机器码执行。

    49900

    通俗的解释什么是Promise

    大家好,又见面了,我是你们的朋友全栈君。 Promise是什么? Promise英文翻译过来意为承诺,许诺。它的作用就像中文意思一样,是一种许诺。...MDN的解释: Promise 对象是一个代理对象(代理一个值),被代理的值在Promise对象创建时可能是未知的。它允许你为异步操作的成功和失败分别绑定相应的处理方法(handlers)。...这让异步方法可以像同步方法那样返回值,但并不是立即返回最终执行结果,而是一个能代表未来出现的结果的promise对象。...catch 方法当执行过程出现异常时执行,或Promise的状态被设为失败(rejected),并且没有设置rejected执行函数时也会执行。...另外Promise可以链式调用,如果then方法执行结束并返回一个新的Promise,那么将会按照顺序依次执行then方法。

    89320

    js --- 执行机制

    JS为什么是单线程的?  JS最初被设计用在浏览器中,那么想象一下,如果浏览器中的JS是多线程的。...process1 删除了该dom,而process2 编辑了该dom,同时下达2个矛盾的命令,浏览器究竟该如何执行呢? 2 JS为什么需要异步?...如果JS中不存在异步,只能自上而下执行,如果上一行解析时间很长,那么下面的代码就会被阻塞。 对于用户而言,阻塞就意味着"卡死",这样就导致了很差的用户体验 3 JS单线程又是如何实现异步的呢?   ...是通过的事件循环(event loop),理解了event loop机制,就理解了JS的执行机制。...,setTimeout里的函数并没有立即执行,而是延迟了一段时间,满足一定条件后才去执行的,这类代码,我们叫异步代码。

    6.3K20

    JS执行机制

    JS执行机制 以下代码执行的结果是什么?...console.log(1); setTimeout(function () { console.log(3); }, 0); console.log(2); 1.1 JS 是单线程...单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。这样所导致的问题是: 如果 JS 执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞的感觉。...于是,JS 中出现了同步任务和异步任务。 同步 ​   前一个任务结束后再执行后一个任务,程序的执行顺序与任务的排列顺序是一致的、同步的。...比如做饭的异步做法,我们在烧水的同时,利用这10分钟,去切菜,炒菜。 他们的本质区别: 这条流水线上各个流程的执行顺序不同。 1.3 JS执行机制(事件循环) 1. 先执行执行栈中的同步任务。

    7.4K20

    深入浅出JVM(七)之执行引擎的解释执行与编译执行

    深入浅出JVM(七)之执行引擎的解释执行与编译执行 本篇文章围绕执行引擎,深入浅出的解析执行引擎中解释器与编译器的解释执行和编译执行、执行引擎的执行方式、逃逸分析带来的栈上分配、锁消除、标量替换等优化以及即时编译器编译对热点代码的探测...执行引擎 hotspot执行引擎结构图 执行引擎分为解释器、JIT即时编译器以及垃圾收集器 执行引擎通过解释器/即时编译器将字节码指令解释/编译为对应OS上的的机器指令 图片 本篇文章主要围绕解释器与即时编译器...Class文件中的代码到底是解释执行还是编译执行只有Java虚拟机自己才能判断准确 编译过程 编译流程在前一篇文章深入浅出JVM之前端编译过程与语法糖原理已经说明,在本篇文章中不再概述 经典编译原理:...(just in time compiler) Java中的"编译期"不确定 可能说的是执行javac指令时的前端编译器 (.java->.class) 也可能是后端编译器JIT (字节指令->机器指令...缺点: 程序启动时,需要先编译再执行 执行引擎执行方式 执行引擎执行方式大致分为3种 -Xint: 完全采用解释器执行 -Xcomp: 优先采用即时编译器执行,解释器是后备选择 -Xmixed: 采用解释器

    12921

    JS执行顺序

    javascript给人的直观感受是,从上往下执行,但实际上却不是这样的,先看个例子 1. console.log(test); 2. var test = "你好"; 3. console.log(...因为javascript执行时,在同一个作用域内是先编译再执行 编译的时候会编译 function 和 var 这两个关键词定义的变量,编译完成后从上往下执行并向变量赋值 所以执行第1行时, var test...已经执行过了,所以test不会报错,而test2就会报错 需要注意的是,对 var test 执行编译时,只是先定义了 test 这个变量,并不会把 "你好" 这个值赋给test,而是到第2行时才给test...赋值的,这就是为什么第1行的执行结果是 undefined 对于上面的例子,可以这样理解 //先编译 var 定义的变量 1. var test; //编译完成后,从上到下执行代码 2. console.log...//执行结果是"你好" function test() { console.log("你好"); } 模拟编译执行过程 //找到 function 定义的部分进行编译 //以函数名作为变量名,同时用函数赋值

    9.2K60

    JS执行机制

    JS 是单线程 JavaScript语言的一大特点就是单线程,也就是说,同-个时间只能做一件事。...这样所导致的问题是: 如果 JS 执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞的感觉。 2....于是,JS 中出现了同步任务和异步任务。 同步 前一个任务结束后再执行后一个任务,程序的执行顺序与任务的排列顺序是一致的、同步的。...比如做饭的异步做法,我们在烧水的同时,利用这10分钟,去切菜,炒菜。 JS中所有任务可以分成两种,一种是同步任务(synchronous),另一种是异步任务(asynchronous)。 ​...JS执行机制(事件循环) ? ? 由于主线程不断的重复获得任务、执行任务、再获取任务、再执行,所以这种机制被称为事件循环( event loop) .

    7.5K31

    JS 到底是在干嘛:一文搞懂JS 执行上下文

    然后,浏览器的JS引擎创建一个特殊的环境来处理这段JS代码的转换和执行。这个环境称为执行上下文。 执行上下文包含当前正在运行的代码,以及帮助其执行的所有内容。...由于每个函数调用都有自己的 FEC,所以在脚本的运行时可以有多个 FEC。 执行上下文是如何被创建的? 前面我们知道了什么是执行上下文,现在让我们看看执行上下文是如何被创建的。...,因为在本例中,函数可以访问的this关键字的值是定义函数的对象的值,而不是全局对象。 通过设置this关键字的值,就定义了执行上下文对象的所有属性。在创建阶段结束之前,现在JS引擎进入执行阶段。...JS 执行栈 执行堆栈,也称为调用堆栈,跟踪脚本生命周期中创建的所有执行上下文。 JavaScript是一种单线程语言,这意味着它一次只能执行一个任务。...总结 JavaScript的执行上下文是正确理解许多其他基本概念的基础。 执行上下文(GEC和FEC)和调用堆栈是在底层由JS引擎执行的进程,让我们的代码运行。

    43410

    关于js暂停执行的方法

    JavaScript是一门单线程但是可处理异步任务的脚本语言,是没有提供sleep等类似的方法的,当有需求需要暂停js脚本时,可以使用以下的方法  单线程分析:http://blog.csdn.net/...talking12391239/article/details/21168489 一:alert,comfirm弹窗暂停 js的alert,confirm弹窗类方法,是可以暂停js脚本执行的 例如: 是需要点击确认才会执行下面的语句的 就算是定时器也一样暂停 var i=0; setInterval(function(){ console.log(i); i++;...服务器接收之后,sleep(time),到时间再输出,回到ajax回调函数,在这个时间 内,ajax是停止状态的 最后再补充几句,其实js是不能暂停脚本的,上面的方法,只是抢占当前浏览器线程,相当于该线程的某个语句一直还停留在当前浏览器线程..., 如:while,当前还未执行完while循环该方法,所以不能退出该线程 不让切换执行,所以实现了暂停 本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn 上一篇

    7.2K00

    RPC是怎么执行的

    我们都知道rpc是远程过程调用的意思,通俗的说,就是可以跨节点调用其他节点上的方法。当然这里要跟rmi区分开来,他们之间有类似的地方。rmi是远程方法调用,是java领域特有的。...而rpc是不区分语言的,发送端和接收端可以是异构的。 这篇文章不会具体说rpc的整个过程,因为在之前的文章中,已经详细的讲解了rpc的发送逻辑,这里接着说rpc的接收逻辑。...,到底是怎样找到本地方法进行执行的?...RPC接收端启动 我们先来看下rpc接收端是怎么启动,并跟rpc服务端进行连接的?...del failure 这个方法就是在调用分发器,由请求分发器执行相应的请求方法,然后将结果返回给rpc发送端。

    46130

    js引擎的执行机制详解

    本文主要和大家分享js引擎的执行机制详解,希望能帮助到大家。 首先,请牢记 2 点: js 是单线程语言 js 中的 event loop 是 js 的执行机制。...深入了解 js 的执行,就等于深入了解 js 里的 event loop js 为什么是单线程的? js 最初被设计用在浏览器中,那么想象一下,如果浏览器中的 js 是多线程的。...,准确的解释是: 3 秒后,setTimeout 里的函数被会推入 event queue,而 event queue(事件队列)里的任务,只有在主线程空闲时才会执行。...引擎的执行机制 首先,请牢记 2 点: js 是单线程语言 js 中的 event loop 是 js 的执行机制。...,准确的解释是: 3 秒后,setTimeout 里的函数被会推入 event queue,而 event queue(事件队列)里的任务,只有在主线程空闲时才会执行。

    1.4K40

    JS立即执行函数的学习

    格式: 格式一:(function(){})() 格式二:(funtion(){}()) 理解:   立即执行函数会将声明的函数表达式执行。...并且在多人的开发项目上,你在全局或局部作用域中声明了一些变量,可能会被其他人不小心用同名的变量给覆盖掉。由于javascipt的自由性。...没有私有域的概念,这样写可以模仿一个私有作用于,用匿名函数作为一个容器,容器内部可以访问外部变量,而外部变量不能访问内部变量。俗称”匿名包裹器“或者“命名空间”。   ...并且在匿名函数容器中写函数然后通过赋值的方法,可以变向的到达java类的效果。将方法存进变量里,全局调用。...var rxr=r.control={}; var ff=22; rxr.ss=11; rxr.aa=function(){ console.log('执行

    2.2K20
    领券