首页
学习
活动
专区
圈层
工具
发布

JavaScript之Event Loop

function () { console.log(12); }); setImmediate(function () { console.log(13); }); 思考一下,能给出准确的输出顺序吗?...一个进程 由单个或多个 线程 组成,线程是负责执行代码的。...比如,假定JavaScript同时有两个线程,一个线程在某个 DOM 节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准呢?...除了广义上的定义,我们可以将任务进行更精细的定义,分为宏任务与微任务: 宏任务(macro-task): 包括整体代码script,setTimeout,setInterval,ajax,dom操作 微任务...优先级 通过上面的介绍,我们就可以得出一个代码执行的优先级: 同步代码(宏任务) > process.nextTick > Promise(微任务)> setTimeout(fn)、setInterval

838120

小白理解 JavaScript 执行机制

为了利用多核CPU的计算能力,HTML5提出Web Worker标准,允许JavaScript脚本创建多个线程,但是子线程完全受主线程控制,且不得操作DOM。...---同步任务 B.先去蒸米饭 然后等蒸米饭的过程中 再去抄菜 ---异步任务 其实这两个方式不就是 一种是同步任务(synchronous),另一种是异步任务(asynchronous)吗。...2.3、JavaScript的宏任务与微任务   除了广义上的定义,我们可以将任务进行更精细的定义,分为宏任务与微任务: 宏任务(macro-task): 包括整体代码script脚本的执行,setTimeout...任务队列可以分为宏任务对列和微任务对列,当当前执行栈中的事件执行完毕后,js 引擎首先会判断微任务对列中是否有任务可以执行,如果有就将微任务队首的事件压入栈中执行。...3.2.5 总结优先级 重点重点重点重点重点重点 通过上面的介绍,我们就可以得出一个代码执行的优先级: 同步代码(宏任务) > process.nextTick > Promise(微任务)> setTimeout

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

    RT-thread —- FinSH 控制台

    三、自定义 FinSH 命令 除了 FinSH 自带的命令,FinSH 还也提供了多个宏接口来导出自定义命令,导出的命令可以直接在FinSH 中执行。...3.1、自定义 msh 命令 自定义的 msh 命令,可以在 msh 模式下被运行,将一个命令导出到 msh 模式可以使用如下宏接口: MSH_CMD_EXPORT(name, desc);//命令及其描述....这个命令可以导出有参数的命令,也可以导出无参数的命令。...导出无参数命令时,函数的入参为 void,示例如下: void hello(void) { rt_kprintf("hello RT-Thread!...这里有个潜在的问题:当一个函数名长度超过FINSH_NAME_MAX 时,使用 FINSH_FUNCTION_EXPORT 导出这个函数到命令表中后,在 FinSH符号表中看到完整的函数名,但是完整输入执行会出现

    1.2K10

    全方位理解JavaScript的Event Loop

    function () { console.log(12); }); setImmediate(function () { console.log(13); }); 思考一下,能给出准确的输出顺序吗?...一个进程 由单个或多个 线程 组成,线程是负责执行代码的。...比如,假定JavaScript同时有两个线程,一个线程在某个 DOM 节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准呢?...除了广义上的定义,我们可以将任务进行更精细的定义,分为宏任务与微任务: 宏任务(macro-task): 包括整体代码script,setTimeout,setInterval,ajax,dom操作 微任务...优先级 通过上面的介绍,我们就可以得出一个代码执行的优先级: 同步代码(宏任务) > process.nextTick > Promise(微任务)> setTimeout(fn)、setInterval

    34130

    MessageMock : 优雅的模拟 Objective-C 方法

    目前只考虑小于等于指针类型的参数,大致测试了一下方法调用仅使用寄存器的情况: 通用寄存器参数最多 6 个(x2 - x7) 浮点寄存器参数最多 8 个(d0 - d7 编译器限制不能连续超过 6 个) 而参数到寄存器的分配比较简单...我们通常所涉及的泛型实际上是id类型,难以通过常规的手段实现真正的泛型,那比如修改返回值的接口就得很多个: - (void)mockReturnObject:(id)value; - (void)mockReturnInt...考虑到接口和实现的简洁,还是希望能做一个真正的泛型接口,最好是能支持编译器的索引,能想到的有两点:C 多参和宏。...)mockReturn:...; 但编译器不支持,所以考虑利用宏来处理,而宏的调用方式都是类似于macro(arg),可以使用宏来简化参数: #define mockReturn(arg) mockReturn...(可以在代码里面试一下),达到了简化参数的目的。

    91020

    C++入门

    命名空间在多个文件中可以合并,所以不必考虑多个相同的命名空间回重复。 但有时命名空间也是累赘,比如自己写好做测试,没有给别人用,不存在命名冲突,我们每次调用变量、函数都需要加上命名空间吗?...只能在声明函数中给 在传参的时候,默认右边没有传参,最右边调用缺省参数 三、函数重载 C语言不支持同名函数。...这也就验证了C++中,引用不能替代指针,在Java语言中,引用是可以改变指向的,所以在链表中,如果用引用表示next指针,Java可以改变指向,指向另一个结点,在C++中就不行,因此C++中引用和指针是相互配合的关系...3、一个对象可以有多个别名 2、做返回值 补充知识点:C语言传值返回的机制 上面count函数返回值是n吗? 不是,返回值是n的拷贝。 为何?...注意内联函数不能声明和定义分离(不能在一个文件定义,在另一个文件声明), 因为内联函数被展开,就没有函数地址了,链接就会找不到。 所以内联函数默认不会生成地址

    12410

    如何实现比 setTimeout 快 80 倍的定时器?

    有什么办法绕过这个 4ms 的延迟吗,上面那篇 MDN 文档的角落里有一些线索: 如果想在浏览器中实现 0ms 延时的定时器,你可以参考这里所说的 window.postMessage()。...作者设计了一个实验方法,就是分别用 postMessage 版定时器和传统定时器做一个递归执行计数函数的操作,看看同样计数到 100 分别需要花多少时间。读者也可以在这里自己跑一下测试。...100,然后切换成 setTimeout 计数到 100。...直接放结论,这个差距不固定,在我的 mac 上用无痕模式排除插件等因素的干扰后,以计数到 100 为例,大概有 80 ~ 100 倍的时间差距。在我硬件更好的台式机上,甚至能到 200 倍以上。...为什么时间切片需要用宏任务,而不是微任务

    24840

    JDK1.9- 线程状态

    实现一个计数器,计数到100,在每个数字之间暂停1秒,每隔10个数字输出一个字符串 代码: public class MyThread extends Thread { public void...为了让其他线程有机会执行,可以将Thread.sleep()的调用放线程run()之内。...3.4 Waiting(无限等待) Wating状态在API中介绍为:一个正在无限期等待另一个线程执行一个特别的(唤醒)动作的线程处于这一状态。 那么我们之前遇到过这种状态吗?...其实waiting状态并不是一个线程的操作,它体现的是多个线程间的通信,可以理解为多个线程之间的协作关系, 多个线程会争取锁,同时相互之间又存在协作关系。...,而timed waiting(计时等待) 中wait方法是带参的。

    37220

    小程序中页面传参的方式你都知道吗

    小程序中页面传参的方式你都知道吗 主要有以下几种方式 url传参 事件通道 EventChannel 本地存储 应用全局变量 公共变量 url传参 方式和web中的方式一致。...options);// { name : 海贼王} }, 需要注意的是,如果 index2 是tabbar页面,那么无法在onLoad中获取页面参数 事件通道 EventChannel 如果一个页面由另一个页面通过...wx.navigatorTo打开的页面获取获取到一个事件通道对象 const EventChannel = this.getOpenerEventChannel(); // 触发事件和传递参数到...);// 获取 应用全局变量 不同的页面都是处于一个共同的应用当中的,这个应用可以理解为 app.js app.js 在这里可以定义公共数据 App({ myData: { name: "悟空..." } }) index1.js 页面中可以通过 getApp 来获取 let app = getApp(); console.log(app.myData); 当然也可以直接修改

    18010

    奔走相告,Python 3.8.0 正式发布!

    在下面的例子中,形参 a 和 b 为仅限位置形参,c 或 d 可以是位置形参或关键字形参,而 e 或 f 要求为关键字形参: def f(a, b, /, c, d, *, e, f): print...这可以排除如下这种笨拙的调用形式: len(obj= hello ) # The "obj" keyword argument impairs readability 另一个益处是将形参标记为仅限位置形参将允许在未来修改形参名而不会破坏客户的代码...调试构建使用与发布构建相同的 ABI 发布构建和调试构建现在都是 ABI 兼容的:定义 Py_DEBUG 宏不会再启用 Py_TRACE_REFS 宏,它引入了唯一的 ABI 不兼容性。...Py_TRACE_REFS 宏添加了 sys.getobjects () 函数和 PYTHONDUMPREFS 环境变量,它可以使用新的 ....像 pyenv 和 Anaconda 这样的工具可以很容易地并排安装多个版本的 Python。或者,你也可以运行官方的 Python 3.8 Docker 容器。

    52630

    C语言预处理指令-学习二十一

    在进行宏定义时,可以引用已定义的宏名。...3.调用有参宏名时,一对圆括号必不可少,圆括号中实参的个数应该与形参个数相同, 如果有多个参数,参数之间用逗号隔开。 4.在宏定义中的形参是标识符,而宏调用中的实参可以是表达式。...文件包含 文件包含是指在一个文件中,去包含另一个文件的全部内容。 C语言用#include指令实现文件包含的功能。...有一些函数和宏几乎所有的程序中都会用到。可以将这些常用函数和宏定义存放在一个文件中, 将这个文件包含在所写的程序中,该文件的内容就会插到程序中。 被包含的文件扩展名可以为 .h ,此扩展名为头文件。...2.一个文件包含命令只能指定一个被包含文件,如果要包含多个文件,则应使用多个文件包含命令。

    59830

    Python 3.8.0特性详解!!

    在下面的例子中,形参 a 和 b 为仅限位置形参,c 或 d 可以是位置形参或关键字形参,而 e 或 f 要求为关键字形参: def f(a, b, /, c, d, *, e, f): print...这可以排除如下这种笨拙的调用形式: len(obj= hello ) # The "obj" keyword argument impairs readability 另一个益处是将形参标记为仅限位置形参将允许在未来修改形参名而不会破坏客户的代码...调试构建使用与发布构建相同的 ABI 发布构建和调试构建现在都是 ABI 兼容的:定义 Py_DEBUG 宏不会再启用 Py_TRACE_REFS 宏,它引入了唯一的 ABI 不兼容性。...Py_TRACE_REFS 宏添加了 sys.getobjects () 函数和 PYTHONDUMPREFS 环境变量,它可以使用新的 ....像 pyenv 和 Anaconda 这样的工具可以很容易地并排安装多个版本的 Python。或者,你也可以运行官方的 Python 3.8 Docker 容器。

    69240

    C语言中的预处理

    符号常量的定义就是一种无参宏定义。 此外,常常对程序中反复使用的表达式进行宏定义。...C语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。对于带 参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。...带参宏定义的一般形式为: #define 宏名(形参表) 字符串; 在字符串中含有各个形参。...一个大的程序可以分为多个模块,由多个程序员分别编程,有 些公用的符号常量或宏定义等可单独组成一个文件,在其他文件的开头用包含命令包含该文件即可使用。...(2)一个 include 命令只能指定一个被包含文件,若有多个文件要包含,则需用多个 include 命令。 (3)文件包含允许嵌套,即在一个被包含的文件中又可以包含另一个文件。

    1.3K60

    Python 官网宣布,正式发布 Python 3.8.0!

    在下面的例子中,形参 a 和 b 为仅限位置形参,c 或 d 可以是位置形参或关键字形参,而 e 或 f 要求为关键字形参: def f(a, b, /, c, d, *, e, f): print...这可以排除如下这种笨拙的调用形式: len(obj='hello') # The "obj" keyword argument impairs readability 另一个益处是将形参标记为仅限位置形参将允许在未来修改形参名而不会破坏客户的代码...调试构建使用与发布构建相同的 ABI 发布构建和调试构建现在都是 ABI 兼容的:定义 Py_DEBUG 宏不会再启用 Py_TRACE_REFS 宏,它引入了唯一的 ABI 不兼容性。...Py_TRACE_REFS 宏添加了 sys.getobjects () 函数和 PYTHONDUMPREFS 环境变量,它可以使用新的 ....像 pyenv 和 Anaconda 这样的工具可以很容易地并排安装多个版本的 Python。或者,你也可以运行官方的 Python 3.8 Docker 容器。

    1.4K20

    还在当调参侠?推荐这三个超参优化库【含示例代码】

    即天下没有免费午餐,用在机器学习领域是指没有一种算法可以适用于所有的机器学习问题,换言之A算法可能在这个数据集上表现最优,但在另一个数据集上表现最好的则是另一个B算法。...正因如此,所以算法工程师们在提升算法性能时常常需要对比多个模型,同时在各模型内部又要调整多组超参,以期实现最优效果。...除了网格搜索和随机搜索外,贝叶斯优化可能是目前最为理想和高效的超参优化(从其名字可以看出,这类方法跟贝叶斯大神有一定关系,大概是由于其中要用到的代理函数与贝叶斯后验概率有关吧)。...yi的过程 X:超参搜索空间,其中每个xi即为X中的一组取值; yi:目标函数的得分,在机器学习场景中即为评估指标结果,例如accuracy_score D:所有(xi, yi)组成的数据集 M:代理函数...这里简单介绍几种主流的代理函数M的选取: 高斯过程,即将K个超参数到评分的映射关系抽象为K维联合高斯分布,从而每次都根据数据集D来计算该联合高斯分布的均值和方差即可。

    77931

    《机器学习》-- 第二章:模型评估与选择

    (1)概念详解 调参 parameter tunning:对模型进行评估和选择时,对算法参数 parameter 进行标定。...通常机器学习过程包括两个阶段,原型设计阶段和应用阶段 原型设计阶段是使用历史数据训练一个适合解决目标任务的一个或多个机器学习模型,并对模型进行验证( Validation )与离线评估( Offline...”、“宏查全率, macro-R ”和“宏F1, macro-F1” ?...分别为上底和下底,更详细的解析可以参考南瓜书 AUC 指标用来评估分类器性能,可以兼顾样本中类别不平衡的情况(当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变),这一点上要比分类准确率更加具有参考价值...整体而言,混淆矩阵给我们呈现了一个清晰可见的分类模型效果评估工具,而基于混淆矩阵的评估指标可以从不同侧面来评价分类器性性能,至于在实际操作中使用什么样的评估指标来进行评价,还要视具体的分析目标而定。

    98930

    C语言有参数宏定义与无参数宏定义

    前两天上课,被JAVA老师问懵了,老师问:“你们学C语言,有没有写过带参的宏玩一玩”,说实话,我根本没听过什么带参的宏,我只用过宏定义,所以我下来一定要找个时间把这“带参的宏搞懂”,于是就有了这篇文章...可以用预处理命令#undef终止宏定义名的辖域。 3....带参的宏,类似与函数,看下面的程序,输出我给了,读者可以先分析 #include using namespace std; #define swap1(a,b) t=a;a=b;b...宏进行定义时不会考虑参数的类型。        3. 参数宏的使用会使具有同一作用的代码块在目标文件中存在多个副本,即会增长目标文件的大小。        4....n");           //输出字符串"vck"         printf("%d", CONS(2,3)); // 2e3 输出:2000         return 0; } 2.当宏参数是另一个宏的时候

    3.2K30

    C语言入门系列之9.预处理

    一、无参宏定义 1.基本使用 无参宏的宏名后不带参数。...(3)在宏定义中的形参是标识符,而宏调用中的实参可以是表达式。...(6)宏定义也可用来定义多个语句,在宏调用时,把这些语句又代换到源程序内。...文件包含命令的注意点: 一个include命令只能指定一个被包含文件,若有多个文件要包含,则需用多个include命令。 文件包含允许嵌套,即在一个被包含的文件中又可以包含另一个文件。...宏定义是用一个标识符来表示一个字符串,这个字符串可以是常量、变量或表达式。 在宏调用中将用该字符串代换宏名。 宏定义可以带有参数,宏调用时是以实参代换形参,而不是值传送。

    69510
    领券