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

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

同步/异步任务是广义上的,同时,JavaScript 中还有宏任务(macrotask)和微任务(microtask)这种更加细致的概念,我们可以将每次执行栈执行的代码当做是一个宏任务(包括每次从事件队列中获取一个事件回调并放到执行栈中执行...我们可以在执行then方法时如果还在等待态 pending,就把回调函数临时寄存到队列(就是一个数组)里,当状态发生改变时依次从数组中取出执行就好了。...方法并将返回值 undefined 传入,resolve 方法执行后即 P2-t1返 实例状态更改为成功态 Fulfilled ,并执行 P2-t1返 实例的缓存方法 P2-t1返 实例的缓存中只有微任务方法包裹的...接着,执行队列中的第三个 then 回调,输出 40,返回undefined,内部执行 resolve(undefined) 后返回的实例状态改为成功态 Fulfilled,并执行实例上的缓存方法,实例上缓存数组为空...接着,执行队列中的第三个 then 回调,输出 40,返回undefined,内部执行 resolve(undefined) 后返回的实例状态改为成功态 Fulfilled,并执行实例上的缓存方法,实例上缓存数组为空

2.2K30

14万字 | 400多道JavaScript 面试题及详细答案(建议收藏)

354 如何从字符串中删除所有换行符? 355 回流和重绘有什么区别? 356 否定数组会发生什么? 357 如果我们添加两个数组会发生什么? 358 在假值上添加加法运算符的输出是什么?...表格形式的一些主要区别 slice() splice() 不修改原始数组(不可变) 修改原始数组(可变) 返回原始数组的子集 将删除的元素作为数组返回 用于从数组中选取元素 用于在数组中插入或删除元素...而另一方面,Concat获取数组并将其与另一个数组连接起来,产生一个没有副作用的全新数组。此外,返回值是前一个数组的串联。...逗号运算符用于从左到右评估其每个操作数并返回最后一个操作数的值。这与数组、对象和函数参数和参数中的逗号用法完全不同。...解构赋值是一个 JavaScript 表达式,它可以将数组中的值或对象中的属性解包为不同的变量。

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

    针对高级前端的8个级JavaScript面试问题

    在bar()函数内部,声明了一个变量a并赋值为 3。那么当bar()函数被调用时,你认为会输出哪个值的a? 当JavaScript引擎执行这段代码时,全局变量a被声明并赋值为5。...在bar()函数内部,声明了一个局部变量a并赋值为3。这个局部变量a与全局变量a是不同的。之后,从bar()函数内部调用了foo()函数。...然而,在valueOf方法不存在或不返回适当的基本值的情况下,JavaScript会退回到toString方法。...Truthy Values(真值):如果原始值是一个真值(即任何不是假值的值),应用 ! 将把它转换为 false。 在我们的案例中,[] 是一个空数组,这在JavaScript中是一个真值。...基于这个条件,如果其中一个操作数是对象,我们必须将其转换为一个原始值。这就是“ToPrimitive算法”出现的地方。我们需要将 x(即 [])转换为一个原始值。数组在JavaScript中是对象。

    21830

    针对高级前端的8个级JavaScript面试问题

    在bar()函数内部,声明了一个变量a并赋值为 3。那么当bar()函数被调用时,你认为会输出哪个值的a? 当JavaScript引擎执行这段代码时,全局变量a被声明并赋值为5。...在bar()函数内部,声明了一个局部变量a并赋值为3。这个局部变量a与全局变量a是不同的。之后,从bar()函数内部调用了foo()函数。...然而,在valueOf方法不存在或不返回适当的基本值的情况下,JavaScript会退回到toString方法。...Truthy Values(真值):如果原始值是一个真值(即任何不是假值的值),应用 ! 将把它转换为 false。 在我们的案例中,[] 是一个空数组,这在JavaScript中是一个真值。...基于这个条件,如果其中一个操作数是对象,我们必须将其转换为一个原始值。这就是“ToPrimitive算法”出现的地方。我们需要将 x(即 [])转换为一个原始值。数组在JavaScript中是对象。

    18710

    C语言学习——函数(含递归)

    根据(1)(2)(3)可知,逻辑上一个C语言程序是由函数构成的,C语言程序从主函数开始执行,在主函数中调用其他函数,这些函数可能又调用别的函数,主函数执行完毕代表整个程序结束。...必须有确定的值。当函数调用时,将实参的值传递给形参,若是数组名,则传送的是数组首地址。 形参必须指定类型,只能是简单变量或数组,不能是常量或表达式 形参与实参类型一致,个数相同顺序相同。...返回语句形式: return(表达式);或 return 表达式; 功能:使程序控制从被调用函数返回到调用函数中,同时把返值带给调用函数 说明: 函数的返回值,必须用 return 语句带回。...return 语句只能把一个返值传递给调用函数。 函数中可有多个return语句,执行哪一个由程序执行情况来定。...函数的调用 主调函数:主动去调用其它函数 被调函数:被其它函数所调用 函数调用的一般形式 函数名(实参表列) 说明: 实参表列:有确定值的数据或表达式 实参与形参个数相等,类型一致,按顺序一一对应

    72810

    BAT及各大互联网公司2014前端笔试面试题--JavaScript篇

    19.用js实现随机选取10--100之间的10个数字,存入一个数组,并排序。...a=1&b=2&c=&d=xxx&e,请写一段JS程序提取URL中的各个GET参数(参数名和参数个数不确定),将其按key-value形式返回到一个json结构中,如{a:'1', b:'2', c:'...如果一对兔子每月生一对兔子;一对新生兔,从第二个月起就开始生兔子;假定每对兔子都是一雌一雄,试问一对兔子,第n个月能繁殖成多少对兔子?...: 1.实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制 考察点1:对于基本数据类型和引用数据类型在内存中存放的是值还是指针这一区别是否清楚...9.在Javascript中什么是伪数组?如何将伪数组转化为标准数组? 答案: 伪数组(类数组):无法直接调用数组方法或期望length属性有什么特殊的行为,但仍可以对真正数组遍历方法来遍历它们。

    1.5K50

    分享 8 个关于高级前端的 JavaScript 面试题

    把它们放在一起: '11' - 1 = 11 - 1 = 10 2、复制数组元素 考虑以下 JavaScript 代码并尝试查找此代码中的任何问题: function duplicate(array)...该局部变量 a 与全局变量 a 不同。之后,从 bar() 函数内部调用 foo() 函数。 在 foo() 函数内部,console.log(a) 语句尝试记录 a 的值。...真值:如果原始值是真值(任何非假值),则应用!会将其转换为 false。 在我们的例子中,[] 是一个空数组,它是 JavaScript 中的真值。由于 [] 为真,所以 ![] 变为假。...基于这个条件,如果其中一个操作数是对象,我们必须将其转换为原始值。这就是 ToPrimitive 算法发挥作用的地方。我们需要将 [] x 转换为原始值。数组是 JavaScript 中的对象。...由于闭包的概念以及 JavaScript 处理变量作用域的方式,实际的输出会有所不同。

    55830

    JavaScript 将对象数组按字母顺序排序

    原文链接:JavaScript 将对象数组按字母顺序排序图片这里给出三种解决方案:1.if条件语句 + sort()2.localeCompare() + sort()3.Collator() + sort...该函数应返回负值、零值或正值,具体取决于参数,例如: function(a, b){ return a - b } sort() 方法比较两个值时,将值发送给比较函数,根据返的(负、零、正)值对值进行排序...该函数计算 40-100,并返回 -60(负值)。sort 函数会将 40 排序为小于 100 的值。sort() 方法会改变原始数组。...:图片如果对象目标 key 中存在标点符号,在这种情况下,我们可以使用localeCompare()函数并将其设置为在比较期间忽略标点符号。...:图片你还可以通过将 localeCompare() 函数的灵敏度设置为 base 来忽略字符串中存在的特殊字符,如下所示。

    62720

    50道JavaScript详解面试题,你需要了解一下

    在这种情况下,只有一个唯一的对象,它具有两个常量x和y,它们指向内存中的唯一对象,并在控制台上返回True。 6、数组对象是JavaScript中的原始对象吗?...即使mymap.get({})是有效的语法,它也会在控制台上返回undefined。因为set和get中的Object是内存中两个不同的空对象,因此getter不会返回值。...但是,可以在JavaScript中通过在未将所有可能的参数都传递给函数时返回不同的输出来执行重载。 29、return语句在数组的forEach循环中做什么?...35、JavaScript中的子程序是什么? 子例程是主例程中遇到的函数,然后将其保存到对象并存储以供以后使用。例如,执行范围(变量,参数等)与子例程一起存储。...它返回h,因为数组在JavaScript中是从零开始的,因此arr [2] [1]将可以访问外部数组的第3个元素和内部数组的第2个元素,从而得出值“ h”。

    3.5K40

    一文多图带你看看如何用「对撞指针」思想巧解数组题目

    欢迎来到算法小课堂,今天分享的内容是对撞指针在数组中的应用。...---- 思路分析: 对于该题目可以用暴力解法来解决,使用双重for循环,第一重for循环每次选取一个数,第二重for循环每次从剩余的数中选取一个数,然后计算两数之和,将其值与目标值比较。...当第一重for循环考察的元素为2时,需要将其和剩余元素7、11、15分别进行求和。但是,剩余元素中最大值是15,其与元素2相加的结果是17,小于目标值18。...输入:[1,8,6,2,5,4,8,3,7] 输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。...第一重for循环选取一条边,第二重for循环是从剩余的边中逐一选取,然后和第一重for循环选取的边进行面积计算。

    1.1K31

    JavaScript数组的常用方法

    以下是一些常用的JavaScript数组方法: 方法名 描述 push() 在数组的末尾添加一个或多个元素,并返回新的长度。 pop() 从数组的末尾删除一个元素,并返回被删除的元素。...shift() 从数组的开头删除一个元素,并返回被删除的元素。 unshift() 在数组的开头添加一个或多个元素,并返回新的长度。...splice() 可以向数组中添加或删除元素,并返回被删除的元素。 slice() 返回一个新的数组,包含从原始数组中选择的元素。 join() 将数组中的所有元素转换为一个字符串。...forEach() 对数组中的每个元素执行给定的函数。 这些方法可以方便地操作和处理JavaScript数组,可以根据实际需求选择使用。...arr2 = arr1.slice(1, 4); // [2, 3, 4] 上述例子中,我们选取 arr1 数组的第 1 个位置到第 4 个位置之间的元素,用于构造新的数组 arr2。

    10310

    JavaScript JSON解析与序列化

    用于转换结果的函数或数组。 如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。...6、JSON序列化选项 实际上,JSON.stringify()除了要序列化的JavaScript对象外,还可以接收另外两个参数,这两个参数用于指定以下不同的方式 序列化JavaScript对象。...为了区别JSON.stringify()接收的 替换(过滤)函数,这个函数被称为还原函数(reviver),但实际上这两个函数的签名是相同的——它们都接收两个参数,一个键和一个值,而且都需要返 回一个值...JSON 数据 我们可以使用 AJAX 从服务器请求 JSON 数据,并解析为 JavaScript 对象。...JSON 数据 如果从服务端接收的是数组的 JSON 数据,则 JSON.parse 会将其转换为 JavaScript 数组: 实例 var xmlhttp = new XMLHttpRequest

    2.6K20

    JavaScript(八)

    JavaScript(八) 發佈於 2018-08-28 这一篇,我们介绍一下函数表达式。 之前说过,定义函数的方式有两种: 一种是函数声明,另一种就是函数表达式。 函数表达式有几种不同的语法形式。...无论什么时候在函数中访问一个变量时,就会从作用域链中搜索具有相应名字的变量。一般来讲,当函数执行完毕后,局部活动对象就会被销毁,内存中仅保存全局作用域(全局执行环境的变量对象)。...但是,闭包的情况又有所不同。 在另一个函数内部定义的函数会将包含函数(即外部函数)的活动对象添加到它的作用域链中。...表面上看,似乎每个函数都应该返自己的索引值,即位置 0 的函数返回 0,位置 1 的函数返回 1,以此类推。但实际上,每个函数都返回 10。...JavaScript 从来不会告诉你是否多次声明了同一个变量; 遇到这种情况,它只会对后续的声明视而不见(不过,它会执行后续声明中的变量初始化)。匿名函数可以用来模仿块级作用域并避免这个问题。

    22820

    前端切图仔,常用的21个字符串方法(下)

    ,并在新的字符串中返回被提取的部分 split() 把字符串分割为子字符串数组 substr() 从起始索引号提取字符串中指定数目的字符 substring() 提取字符串中两个指定的索引号之间的字符...移除字符串首尾空白 valueOf() 返回某个字符串对象的原始值 十一:slice()方法 定义和用法 slice() 方法可从已有的数组中返回选定的元素。...实例 例子 1 在本例中,我们将创建一个新数组,然后显示从其中选取的元素: javascript"> var arr = new Array(3) arr[0]...: George,John,Thomas John,Thomas George,John,Thomas 例子 2 在本例中,我们将创建一个新数组,然后显示从其中选取的元素: <script type="...实例 例子 1 在本例中,我们将按照不同的方式来分割字符串: javascript"> var str="How are you doing today?"

    54610

    JavaScript入门(1)

    Hello小可爱们,今天我们又要回到学习主题咯,前面学习了HTML和CSS的用法,今天我们就要为Web页面注入生命啦,那就是JavaScript,通过JavaScript我们可以让我们的页面动起来...js语言单独放置在一个文件中,并引入HTML。...按照我的理解来说,值类型就是简单的一个数据,一对一的一个数据关系,包括字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)和Symbol(ES6...引入的新原始数据类型);引用类型则是通过值类型组成的复杂数据结构,包括对象(Object)、数组(Array)和函数(Function) 这里有个注意的地方,null类型代表空值,代表一个空对象指针,使用...,当“+”用于字符串中时,则是将两个字符串进行拼接;当“+”前后是不同类型的时候,输出结果有时也会出乎人的意料,当字符串与数字相加的时候浏览器会将数字自动转化为字符串类型,并输出字符串。

    83620

    深入理解ES6--解构

    解构时一种打破数据结构,将其拆分为更小部分的过程。解构在实际开发中经常会应用到对象和数组中。...关于解构的基本用法,请参考:ES6–变量的声明及解构赋值 解构:使数据访问更便捷 对象解构 解构赋值 一定要用一对小括号包裹解构赋值语句,javascript引擎将一对开放的花括号视为一个代码块...数组解构 通过在数组中的位置进行选取,且可以将其存储在任意变量中,未“显式声明”的元素都会被直接被忽略。...green']; let [firstColor, ...otherColor] = colors; console.log(otherColor) // ["blue", "green"] ...语法将数组中的其余元素赋值给一个待定的变量...示例:克隆数组 let colors = ['red', 'blue', 'green']; // es5方式 colors.concat() // es6方式 [...colors] 注意:在被解构的数组中

    54731

    C语言学习——数组

    输出时‘\0’转换成‘\n’,即输出字符后换行。 字符串输入函数gets 格式:gets (字符数组) 功能:从键盘输入一个以回车结束的字符串放入字符数组中,并自动加‘\0’。...说明:输入串长度应小于字符数组维数 字符串连接函数strcat 格式:strcat (字符数组1,字符数组2) 功能:把字符数组2连到字符数组1后面 返值:返回字符数组1的首地址 说明:字符数组...字符串拷贝函数strcpy 格式:strcpy(字符数组1,字符串2) 功能:将字符串2,拷贝到字符数组1中去 返值:返回字符数组1的首地址 说明:字符数组1必须足够大,>字符串2 字符数组...字符串比较函数strcmp 格式:strcmp(字符串1,字符串2) 功能:比较两个字符串 比较规则:对两串从左向右逐个字符比较(ASCII码),直到遇到不同字符或‘\0’为止。...字符串长度函数strlen 格式:strlen(字符数组) 功能:计算字符串长度 返值:返回字符串实际长度,不包括‘\0’在内 例 对于以下字符串,strlen(s)的值为: (1)char

    82020

    前端切图仔,常用的14个数组方法

    Array 对象方法 方法 描述 concat() 连接两个或更多的数组,并返回结果。 join() 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。...unshift() 向数组的开头添加一个或更多元素,并返回新的长度。 valueOf() 返回数组对象的原始值 1:concat()方法 定义和用法 concat() 方法用于连接两个或多个数组。...: George,John,Thomas Thomas,John,George 6:shift()方法 定义和用法 shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。...实例 例子 1 在本例中,我们将创建一个新数组,然后显示从其中选取的元素: javascript"> var arr = new Array(3) arr[0]...: George,John,Thomas John,Thomas George,John,Thomas 例子 2 在本例中,我们将创建一个新数组,然后显示从其中选取的元素: <script type="

    42140

    几种基础排序算法的python实现

    一趟快速排序的算法是: 1)设置两个变量i、j,排序开始的时候:i=0,j=N-1; 2)以第一个数组元素作为关键数据,赋值给key,即key=A[0]; 3)从j开始向前搜索,即由后开始向前搜索...如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。...思路: 将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。...(4)用一个start数组计算原数组中某一位(从最低位向最高位计算)相同数据出现的位置; (5)将桶中数据从小到大用tmp数组收集起来; (6)重复(3)(4)(5)直到所有位都被统计并计算过,用tmp...收集起来; (7)将tmp数组拷回到原数组中; 代码: import math def radix_sort(arr): radix = 10 #基数 # k可以表示任意整数

    45121

    php serialize讲解与json性能测试

    将对象的状态信息转换为可以存储或传输的窗体的过程。 在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。...类似地,反序列化从序列化的表示形式中提取数据,并直接设置对象状态,这也与可访问性规则无关。 对于任何可能包含重要的安全性数据的对象,如果可能,应该使该对象不可序列化。...Foo::compare_serialize_and_json($foo); 输出: 数组: 序列化后的值:a:3:{s:4:”wwww”;i:0;s:6:”phppan”;i:1;s:3:”com...PHP中unserialize()函数来反串行化对象,这个函数的参数即为serialize()函数的返回值,输出当然是重新组织好的对象。 "; } //指定串行化时把返回的数组中$name和$age值串行化,忽略没在数组中的属性$sex function __sleep() {

    76420
    领券