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

7 个棘手 JavaScript 面试题!

空语句是不做任何事情空语句。 for() 空语句上进行 4 次迭代(不执行任何操作),而忽略实际项目推入数组块:{number.push(i + 1);}。...i 变量递增到4,然后 JavaScript 一次进入块 {number.push(i + 1);}, 4 +1 推入数字数组。...当我第一次尝试解决它,这也是答案! 执行此代码段有两个阶段。 Phase 1 1、for() 重复3次,每次迭代过程中,都会创建一个新函数 log() 来捕获变量 i。...2、当 for() 循环完成,i 变量为 3。 log() 是一个捕获变量 i 闭包,该变量 for() 循环外部范围中定义。请务必注意,闭包可以词法捕获 i 变量。...这就是为什么控制台输出为3、3 和 3 原因。 您知道如何代码段记录为0、1 和 2 吗?请在下面的评论中写下您解决方案! 6、浮点数计算 Question 这个等式结果是什么?

58230

Java程序员,这7个简单但棘手JavaScript面试问题。你会吗?

空语句是不做任何事情空语句。 for() 空语句上进行4次迭代(不执行任何操作),而忽略实际项目推入数组块:{number.push(i + 1);}。...i 变量递增到4,然后JavaScript一次进入块 {number.push(i + 1);}, 4 +1 推入数字数组。...当我第一次尝试解决它,这也是答案! 执行此代码段有两个阶段。 Phase 1 for() 重复3次,每次迭代过程中,都会创建一个新函数 log() 来捕获变量 i。...当 for() 循环完成,i 变量为 3。 log() 是一个捕获变量 i 闭包,该变量 for() 循环外部范围中定义。请务必注意,闭包可以词法捕获 i 变量。...这就是为什么控制台输出为3、3 和 3 原因。 如果您难以理解闭包,建议阅读“ JavaScript闭包简单说明”。 您知道如何代码段记录为0、1和2吗?请在下面的评论中写下您解决方案!

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

【译】7个简单但棘手JavaScript面试问题

空语句是不做任何事情空语句。 for() 空语句上进行4次迭代(不执行任何操作),而忽略实际项目推入数组块:{number.push(i + 1);}。...i 变量递增到4,然后JavaScript一次进入块 {number.push(i + 1);}, 4 +1 推入数字数组。...当我第一次尝试解决它,这也是答案! 执行此代码段有两个阶段。 Phase 1 for() 重复3次,每次迭代过程中,都会创建一个新函数 log() 来捕获变量 i。...当 for() 循环完成,i 变量为 3。 log() 是一个捕获变量 i 闭包,该变量 for() 循环外部范围中定义。请务必注意,闭包可以词法捕获 i 变量。...面试中提出棘手问题是否公平?让知道你意见。

31320

捕捉性能回归:进化 eBPF 程序

下面的代码只启用了 “user” 功能由用户空间使用。 实现 Aya 所需 trait , SourceAddr 标记为适用于 eBPF 映射。...下面的操作被认为是 unsafe ,因此我们必须明确选择。 尝试 Fizz 消息推入 SOURCE_ADDR_QUEUE 队列。如果出现错误,则... 记录错误和 eBPF 上下文。...("Exiting..."); Ok(()) } 主函数基本上保持不变。除了第 5 行我们添加一个名为 spawn_agent 辅助函数。..., source_addr); } } } 逐行解释: spawn_agent 函数是异步,这就是为什么它必须在 main 函数中使用 .await。...is_fibonacci 函数计算 Fibonacci 序列,直到达到或超过传入参数 n 。然后,它检查这两个是否相等,以表示参数确实属于 Fibonacci 序列。

9210

PHP技巧和窍门来简化你代码

当在函数中使用return,return语句下面的任何代码都将被完全忽略,因此,如果 user_is_male为true,则else块将被忽略,因为返回了。...当然,您可以像上面技巧5中示例一样编写函数说明,但是大型项目中为所有函数和变量编写函数说明成为一项艰巨任务。...,但是该函数是为处理数组而编写。...这里危险之处在于,传递字符串不会破坏应用程序,它仍然可以完美运行。为什么? 如果“ chair”传递到函数中,它将被评估为allItems()["c"],最终将导致错误,使您在12am起床。...谢谢阅读 这些是PHP之旅中发现一些技巧和窍门,其中一些可能对您有用,而另一些则可能不起作用,请随时选择自己喜欢并坚持使用。

3.1K40

JavaScript 是如何工作:JavaScript 共享传递和按传递

关于JavaScript如何传递给函数互联网上有很多误解和争论。大致认为,参数为原始数据类使用按传递,参数为数组、对象和函数等数据类型使用引用传递。...它对数组和对象使用按传递,但这是共享传参或拷贝引用中使用传参。这些说有些抽象,先来几个例子,接着,我们研究JavaScript 函数执行期间内存模型,以了解实际发生了什么。...RV 返回:这是可选函数可以返回,也可以不返回。 参数:函数所需参数推入堆栈。 局部变量:函数使用变量被推送到堆栈。...调用函数之前,调用者参数推入堆栈。因此,可以正确地说 js 中传递参数是传入一份拷贝。如果被调用函数更改了参数,它不会影响原始,因为它存储在其他地方,它只处理一个副本。...具体来说,当你传递一个对象(或数组,你无形地传递对该对象引用,并且可以修改该对象内容,但是如果你尝试覆盖该引用,它将不会影响该对象副本- 即引用本身按传递: function replace

3.7K41

Vue 选手转 React 常犯 10 个错误,你犯过几个?

但是,它并不起作用!当我们输入一个项目并提交表单,该项目没有被添加到购物清单中。 问题就在于我们违反了也许是 React 中最核心原则 —— 不可变状态。...React依靠一个状态变量地址来判断状态是否发生了变化。当我们把一个项目推入一个数组,我们并没有改变该数组地址,所以 React 无法判断该已经改变。...例如,这里是从服务器获取数据创建唯一ID方法: async function retrieveData() { const res = await fetch('/api/data');...不过,这只有我们传递给它一个定义好才会起作用!通过 email 初始化为一个空字符串,确保该永远不会被设置为 undefined。...,这仍然不起作用;你将会得到一个新错误信息: destroy is not a function 我们都知道,useEffect 钩子函数一个特性是清理功能,即 return 函数

19010

JavaScript 数组分组方法

数组项目进行分组,你可能已经做过很多次了。每次都会手动编写一个分组函数,或者使用 lodash groupBy 函数。...你总是要检查对象是否存在分组键,如果不存在,就用一个空数组来创建它。然后再将项目推入数组。...这意味着你可以使用所有常用 Map 函数。这也意味着你可以从回调函数返回任何类型。...几年前,尝试实现 Array.prototype.flatten ,这一点一次被称为 SmooshGate[1] 事件中得到了强调。 幸运是,使用静态方法似乎更有利于未来可扩展性。...当 Record 和 Tuples 提议实现时,我们可以添加一个 Record.groupBy 方法,用于数组分组为不可变记录。 总结 项目分组显然是我们开发人员一项重要工作。

20710

【Redis】Redis五种数据结构

REDIS_ENCODING_RAW 编码, 字符串作为键或者保存进数据库, 程序会尝试字符串转为 REDIS_ENCODING_INT 编码 哈希表 ---- REDIS_HASH (哈希表...脱离阻塞状态 通过新元素推入造成客户端阻塞某个键中, 可以让相应客户端从阻塞状态中脱离出来 (取消阻塞客户端数量取决于推入元素数量)。...LPUSH 、 RPUSH 和 LINSERT 这三个添加新元素到列表命令, 底层都由一个 pushGenericCommand 函数实现, 这个函数运作流程如下图: [外链图片转存失败(img-TbnHSUQy...intset底层实现方式是数组,这个数组以有序、无重复方式保存集合元素,并且根据新添加整数元素类型来进行自动升级,例如从int16_t升级到int32_t; 它具有灵活性+节省内存优点; 集合类型只有整数元素并且元素不是很大时候选择...intset是比较好一个选择; 字典编码集合 当使用 REDIS_ENCODING_HT 编码, 集合元素保存到字典键里面, 而字典则统一设为 NULL 。

47530

你可能从未使用过11+个JavaScript特性

我们 for 循环中看到这个: for(let i = 0, ii = 1; i< 10; i++, ii--) { ... } 当我们要编写短 lambda 函数,这会派上用场: const lb...= (a, b, arr) => (arr.push(a*b), a*b) 这里有两个语句,第一个乘法结果推入数组arr,第二个乘数a和b推入数组。...这是为什么喃? 其实,新 Array 构造函数正在从某些编程语言中提取思想,在这些语言中,你需要为数组指定内存,这样就不会出现 ArrayIndexOutOfBounds 异常。...const arr = [1, 2, 3] arr.length // 3 减小 length 属性,会使 JS 引擎数组元素个数减少到与 length 属性相等。...如果增加 length 属性,则 JS 引擎添加元素(未定义元素)以使数组元素数量达到 length 属性

98710

Java 函数调用是传还是传引用?从字节码角度来看看 !

答错了,认为传入function就是main函数a,function中修改了a地址,因此回到主函数后,a地址已经变成了function中所赋予a2地址,因此经过function处理后...但结果并不是,因为忽略了Java基础知识点之一。 Java中传参都是传递,如果是基本类型,就是对拷贝,如果是对象,就是对引用地址拷贝。...主函数执行时,JVM操作栈会推入函数栈帧,其中包含了主函数局部变量表,字节码,返回等信息。...字节码显示,通过iconst_2,istore_1,基本类型2推入栈,并保存在局部变量a中,这里就展示了我们方法内部修改都是对function3局部变量a修改,不影响主函数a。...2.然后进去main函数栈帧,初始化完毕后如下图所示。 3.主要看bipush 18,基本变量18推入操作栈,基本变量类型是存储栈帧内部

1.5K30

期待已久 JS 原生 groupBy() 分组函数即将到来

处理数组,有时我们需要将其中项目按照某个特定属性或条件进行分类或分组。这个过程可能会多次重复,每次都需要编写分组函数或使用像 lodash 这样库中 groupBy 函数来完成。...具体来说,代码需要不断检查对象中是否已经存在与年龄对应键,如果不存在则创建一个空数组,并将当前个人对象推入数组。...如果返回其他任何,将被强制转换为 string 。 我们例子中,我们一直 age 返回为 number ,但在结果中它被强制转换为 string 。...这就意味着你可以使用所有常规 Map 方法来处理它,就像你处理其他 Map 一样。同时,由于它是一个 Map,你可以从回调函数中返回任何类型,而不仅仅是作为键字符串。...这是因为根据这个提案说明,曾经有一个库尝试 Array.prototype 上添加了一个不兼容 groupBy 方法补丁。设计新 API ,特别是在网络环境下,保持向后兼容性非常重要。

44320

JavaScript(五)

另外,使用Array构造函数也可以省略new操作符: var colors = Array(3); // 创建一个包含3项数组 var names = Array("...默认情况下,sort() 方法按升序排列数组项——即最小位于最前面,最大排在最后面。...每个方法都接收两个参数: 要在每一项上运行函数和(可选)运行该函数作用域对象——影响 this 。传入这些方法中函数会接收三个参数: 数组、该项在数组位置和数组对象本身。...这两个方法都接收两个参数: 一个每一项上调用函数和(可选)作为缩小基础初始。...Date.UTC() 方法同样也返回表示日期毫秒数,但它与 Date.parse() 构建使用不同信息。

89020

JS引擎执行机制event loop

所以,这里我们首先知道了JS里一种分类方式,就是任务分为: 同步任务和异步任务 图片描述 按照这种分类方式:JS执行机制是 首先判断JS是同步还是异步,同步就进入主进程,异步就进入event table...异步任务event table中注册函数,当满足触发条件后,被推入event queue 同步任务进入主线程后一直执行,直到主线程空闲时,才会去event queue中查看是否有可执行异步任务,如果有就推入主进程中...,放到主线程里 当 1、 3控制条被打印后,主线程去event queue(事件队列)里查看是否有可执行函数,执行setTimeout里函数 3.JS中event loop(2) 所以,上面关于...准确解释是: 3秒后,setTimeout里函数被会推入event queue,而event queue(事件队列)里任务,只有主线程空闲时才会执行。...所以只有满足 (1)3秒后 (2)主线程空闲,同时满足,才会3秒后执行该函数 如果主线程执行内容很多,执行时间超过3秒,比如执行了10秒,那么这个函数只能10秒后执行了

1.7K40

使用高阶函数:让你 JS 代码更牛更有范

addOne()接受一个数组1和数组每个数字相加,并将其显示控制台中。...接着,匿名箭头函数数字+ 1输出到控制台。 同样地,高阶函数forEach()函数应用于数组每个元素。...再接再厉,举一反三 我们已经讲了这么多,想你已经开始明白为什么高阶函数这么好了! 让我们来看另一个例子…… 回到我们forEach()示例中,我们向数组每个数字添加1,并将每个输出到控制台。...1添加到现有numbers数组每个元素中,并将结果推入返回数组。...与forEach()类似,map()对numbers数组每个元素应用匿名函数。然而,map()进程中创建了一个新数组。 进一步 如果我们想要找到numbers数组中所有总和,该怎么办?

50220

2021前端面试题及答案_前端开发面试题2021

大家好,又见面了,是你们朋友全栈君。...我们可以为元素添加 ref 属性然后回调函数中接受该元素 DOM 树中句柄,该会作为回调函数第一个参数返回: class CustomForm extends Component { handleSubmit...更重要是,你不能保证组件挂载之前 Ajax 请求已经完成,如果是这样,也就意味着你尝试一个未挂载组件上调用 setState,这将不起作用。...回调中你可以使用箭头函数,但问题是每次组件渲染都会创建一个新回调。...16为什么setState 参数是一个 callback 而不是一个对 因为 this.props 和 this.state 更新可能是异步,不能依赖它们去计算下一个 state。

1.3K30

10 分钟理解 JS 引擎执行机制

所以,这里我们首先知道了JS里一种分类方式,就是任务分为:同步任务和异步任务。 !...[图片描述][1] 按照这种分类方式:JS执行机制是: 首先判断JS是同步还是异步,同步就进入主进程,异步就进入event table 异步任务event table中注册函数,当满足触发条件后,被推入...,放到主线程里 当 1、 3控制条被打印后,主线程去event queue(事件队列)里查看是否有可执行函数,执行setTimeout里函数。...:3秒后,setTimeout里函数被会推入event queue,而event queue(事件队列)里任务,只有主线程空闲时才会执行。...所以只有满足 (1)3秒后 (2)主线程空闲,同时满足,才会3秒后执行该函数 如果主线程执行内容很多,执行时间超过3秒,比如执行了10秒,那么这个函数只能10秒后执行了。 觉得本文对你有帮助?

1.6K91

【JS】779- 深入理解Promise

(executor),调用 resolve() 函数,此时 onResolvedB 推入微任务队列 2; 截止目前微任务队列 1 代码全部执行完成,即 onResolvedA 函数执行完成。...: 执行 resolve(1),处理程序 A 推入微任务队列 1; 执行 resolve(2),处理程序 C 推入微任务队列 2; 同步任务执行完成,执行微任务队列 1 里内容,打印 A,A 所在函数执行完成后生成了一个...且新实例内部是由所有 Promise 解决后组成数组: let p1 = Promise.all([ Promise.resolve('3'), Promise.resolve...Promise.allSettled() Promise.allSettled(iterable) 当所有的实例都已经 settled,即状态变化过了,那么返回一个新实例,该新实例内部是由所有实例和状态组合成数组...,数组每项是由每个实例状态和组成对象。

1K10

Julia机器学习核心编程.6

代码使用rand函数创建了一个数组,该函数接收两个,其中第一个是范围,用“:”表示;第二个是一个数。本例创建了一个具有6个元素数组。 ? 前面我们讨论数组元素类型是相同。...Julia中创建数组时会将Int类型转换为Float类型。一般来说,Julia会尝试使用promote()函数来提升类型。如果不能提升,数组将会变成Any类型。 ?...Julia中列表解析式 通过列表推导创建数组更加容易,接下来我们就创建一个数组,并用2幂来填充数组。 使用列表解析式创建 ? 对不住了,报错了 ? 创建空白数组,用push!函数添加元素 ?...现在,假设此数据集在位置x[1]处有缺失。这意味着该数据没有意义,而不是1.1。我们不能用Julia中数组类型来表示。当尝试分配NA发生错误,我们无法NA添加到数组中。...在下面的代码中,我们使用了mean()函数和true||x。mean()函数不起作用,因为它涉及NA;而true||x则按预期工作。

2.2K20

C++和Java中STL库入门

为什么使用STL 在学习数据结构时候,程序中会使用到堆、栈、队列、链表等一些基本算法,而学习数据结构时候,这些基本算法写起来十分繁琐,如果不想写这些,那么就可以考虑一下STL了。...,第二个参数是数组需要排序第二个地址,都三个参数是一个自定义函数,对数组排序函数,上面的cmp函数是使数组元素从大到小排序。...1.需要头文件#include 2.不定数组 vector a, b; a.push_back(1); // 推入一个新数组最后 a.pop_back(); // 删除数组最后那个...a.front(); // 数组开头 a.back(); // 数组结尾 a = b; // 数组拷贝 a == b; // 数组是否相同 a[1]; // 数组中第二个...q.push(1); // 1推入堆栈 q.pop(); // 推出堆栈最后元素 q.top(); // 堆栈最后元素 pair: 1.需要头文件#include

1.2K50
领券