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

8个问题看你是否真的懂 JS

// 比如:var a console.log(a); // 打印 undefined // 实际初始化20发生在这里 var a = 20; // local scope } 2、如果我们使用...JS调用栈是后进先出(LIFO)。引擎每次从堆栈取出一个函数,然后从上到下依次运行代码。每当它遇到一些异步代码,如setTimeout,它就把它交给Web API(箭头1)。...由浏览器选择其中一个队列并在该队列处理回调。 在底层来看,JavaScript中有宏任务和微任务。setTimeout回调是宏任务,Promise回调是微任务。...因此,在foo.getx()例子,它指向foo对象,返回90。而在xGetter()情况下,this指向 window对象, 返回 window x,即10。...如果你所有答案都正确,那么干漂亮。 咱们都是通过犯错来学习。 这一切都是为了了解背后“原因”。

1.3K30

8个问题看你是否真的懂 JS

// 比如:var a console.log(a); // 打印 undefined // 实际初始化20发生在这里 var a = 20; // local scope } ----...JavaScript 环境可视化形式如下所示: ? JS调用栈是后进先出(LIFO)。引擎每次从堆栈取出一个函数,然后从上到下依次运行代码。...由浏览器选择其中一个队列并在该队列处理回调。 在底层来看,JavaScript中有宏任务和微任务。 setTimeout回调是宏任务, Promise回调是微任务。...因此,在 foo.getx()例子,它指向 foo对象,返回 90。而在 xGetter()情况下, this指向 window对象, 返回 window x,即 10。...如果你所有答案都正确,那么干漂亮。咱们都是通过犯错来学习。这一切都是为了了解背后“原因”。

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

30·灵魂前端工程师养成-jQuery设计模式

,是不是也可以不加api?...是,因为jQuery函数确实构造了一个对象 不是,因为不需要写new jQuery()就能构造一个对象 结论: 1.jQuery是一个不需要加new构造函数 2.jQuery不是常规意义上构造函数...3.这是因为jQuery用了一些技巧 那么我们可以使用链式风格来实现增删改查 ---- 查 jQuery('#xxx') 返回不是元素,而是一个api对象: 该功能已实现 jQuery('#xxx...代码简化一下 main.js jQuery('.test1').find('.child').addClass('.red') 实际上它加到了find前面的api于是乎,就加到了test1上了,那么我们只能重新封装....$ = window.jQuery 所以,我们是不是可以用小学学习数学知识等量代换 window.$ = window.jQuery = fn 最终代码如下: window.$ = window.jQuery

1.5K20

一文读懂 HTTP2 特性

HTTP/2 ,同域名下所有通信都在单个连接上完成,该连接可以承载任意数量双向数据流。每个数据流都以消息形式发送,消息又由一个或多个帧组成。...HTTP 1.x ,如果想并发多个请求,必须使用多个 TCP 链接,且浏览器为了控制资源,还会对单个域名有 6-8个TCP链接请求限制,如下图,红色圈出来请求就因域名链接数已超过限制,被挂起等待了一段时间...在 HTTP/2 ,有了二进制分帧之后,HTTP /2 不再依赖 TCP 链接去实现多流并行了,在 HTTP/2: 同域名下所有通信都在单个连接上完成。 单个连接可以承载任意数量双向数据流。...例如服务端可以主动把JS和CSS文件推送给客户端,不需要客户端解析HTML时再发送这些请求。 服务端可以主动推送,客户端也有权利选择是否接收。...接下来我们看看第二个请求头部: ? 从上图可以看到,得益于头部压缩,第二个请求cookie占用了1个字节,我们来看看变化了Accept字段: ?

78511

一文读懂 HTTP2 特性

HTTP/2 ,同域名下所有通信都在单个连接上完成,该连接可以承载任意数量双向数据流。每个数据流都以消息形式发送,消息又由一个或多个帧组成。...: 在 HTTP/2 ,有了二进制分帧之后,HTTP /2 不再依赖 TCP 链接去实现多流并行了,在 HTTP/2: 同域名下所有通信都在单个连接上完成。...例如服务端可以主动把JS和CSS文件推送给客户端,不需要客户端解析HTML时再发送这些请求。 服务端可以主动推送,客户端也有权利选择是否接收。...,要么替换表之前。...接下来我们看看第二个请求头部: 从上图可以看到,得益于头部压缩,第二个请求cookie占用了1个字节,我们来看看变化了Accept字段: 由于Accept字段与请求一内容不同,需要发送给服务器

66800

通过事例重温一下常见 JS 15 种数组操作(备忘清单)

上已经收录,更多往期高赞文章分类,也整理了很多我文档,和教程资料。欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 数组是 JS 中广泛使用数据结构。...(99); // => false 7.2 array.find() 方法 array.find(predicate) 方法返回数组满足提供测试函数第一个元素。...数组插入 10.1 array.push() 方法 array.push(item1 [...,itemN]) 方法将一个或多个项追加到数组末尾,并返回新长度。...names.splice() 可以插入新元素,不是插入已删除元素。...如果比较compare(a, b)返回结果: 如果 a小于b,在排序后数组a应该出现在b之前,就返回一个小于0。 如果a等于b,就返回0。 如果a大于b,就返回一个大于0

81420

通过事例重温一下常见 JS 15 种数组操作(备忘清单)

作者:Dmitri Pavlutin 译者:前端小智 来源:dmitripavlutin.com 数组是 JS 中广泛使用数据结构。...(99); // => false 7.2 `array.find()` 方法 array.find(predicate) 方法返回数组满足提供测试函数第一个元素。...数组插入 10.1 `array.push()` 方法 array.push(item1 [...,itemN]) 方法将一个或多个项追加到数组末尾,并返回新长度。...names.splice() 可以插入新元素,不是插入已删除元素。...如果比较compare(a, b)返回结果: 如果 a小于b,在排序后数组a应该出现在b之前,就返回一个小于0。 如果a等于b,就返回0。 如果a大于b,就返回一个大于0

1.2K30

拆解学习7-时间限制,收益图表

+ 所有已完成交易总货币价值 + 所有未平仓位的当前未实现损益 array.new_float 此函数创建一个新浮点型元素阵列对象。...参数 size (series int) 序列初始大小。可选。默认为0。 initial_value (series int/float) 所有序列元素初始。可选。默认为“na”。...array.pop 该函数从阵列删除最后一个元素并返回其。 返回 被删除元素array.push 该函数将一个附加到阵列。...table.cell 此函数在表格定义一个单元格并设置其属性。 array.get 该函数返回指定索引处元素。 返回 阵列元素。...接下来慢慢收集好指数,挪轮子造车应该不是问题了 终身学习,不急躁。

45210

Echarts图表结合webgl可视化平台进行数据对接

在这里我写了三个方法来替换series数据以及xAxis中代表横坐标的数据。 /**     * 获取到温度变化并且传入到echarts图表中去,同时修改图表展示。    ...**     * 获取到湿度变化并且传入到echarts中去,同时修改图表展示     */ function changeHumidity(d) { //获取到返回字符串temper var...数据对应数组添加变化后温度 var array = []; array = option.series[1].data; array.push(parseInt(newHumi)); option.series...')); mychart.setOption(option); 这两行代码,同时对于图表数据修改也要准确,当所有代码修改完成后,我们就可以开始调用对应方法来实现我们Echarts图表结合Ajax...**     * 获取到湿度变化并且传入到echarts中去,同时修改图表展示     */ function changeHumidity(d) { //获取到返回字符串temper var

2.9K32

Typescript学习笔记,从入门到精通,持续记录

如果定义时候有赋值,类型就会被推断为这个值得类型; 如果定义时候没有赋值,不管之后有没有赋值,都会被推断成 any 类型完全不被类型检查 2.任意(any) 如果是一个普通类型,在赋值过程改变类型是不被允许...只读约束存在于第一次给对象赋值时候,不是第一次给只读属性赋值时候 5.数组类型 //最简单方法是使用「类型 + 方括号」来表示数组 let fibonacci: number[] = [1,...array.push(item); }); } let a = []; push(a, 1, 2, 3); 注意,rest 参数只能是最后一个参数,关于 rest 参数,可以参考 ES6 ...Node.js 不是内置对象一部分,如果想用 TypeScript 写 Node.js,则需要引入第三方声明文件:npm install @types/node --save-dev 类型别名用来给一个类型起个新名字.../file", // 指定生成声明文件存放目录 "emitDeclarationOnly": true, // 生成声明文件,不会生成js文件 "sourceMap": true,

1.9K50

JS排序算法

由于浏览器原生支持(无需安装任何插件),用JS来学习数据结构和算法也许比c更加便捷些。因为只需一个浏览器就能啪啪啪调试了。...比如下图我学习归并排序算法时,看代码感觉怎么都理解不了,但是结合chrome自带断点调试功能,我便很快理解了其中思想。 ? 冒泡排序 <!...)); array.bubbleSort(); //array.selectionSort(); console.log(array.toString()); 选择排序  选择排序思路就是找到数据结构最小并...2 将其放置在第一位,接着找到第二小并将其放在第二位,以此类推。 ...讲下快速排序思路  在数据集之中,选择一个元素作为"基准"(pivot)。 所有小于"基准"元素,都移到"基准"左边;所有大于"基准"元素,都移到"基准"右边。

1.7K80

TCB系列学习文章——数据库实时推送

实时数据推送 介绍 云开发数据库支持实时推送变更数据能力,给定查询条件,每当数据库更新导致查询条件对应查询结果发生变更时,小程序可收到一个更新事件,其中可获取更新内容和更新后查询结果快照。...实时数据推送有广泛应用场景,此处是一些示例: 聊天/即时通信:小游戏内聊天、大厅广播、区服广播等;企业内部小程序即时通信能力等 多人小游戏:使用状态同步小游戏,如棋牌类等回合制游戏 协作工具:如在线协作文档...,定义见 DataType docId string 更新记录 id doc object 更新完整记录 updatedFields object 所有更新字段及字段更新后,key 为更新字段路径...,value 为字段更新后,仅在 update 操作时有此信息 removedFields string[] 所有被删除字段,仅在 update 操作时有此信息 DataType 枚举 枚举...最佳实践 监听必要数据 监听时应明确查询条件,监听必须用到数据,避免监听不必要数据,以此提高初次加载数据性能以及接收数据变更性能。

1.3K30

TypeScript进阶

类型断言 类型断言(Type Assertion)是开发者手动指定一个类型: as 类型 在 tsx 语法(React jsx 语法 ts 版)必须使用 as 类型。...对象类型:接口 在 TS ,使用接口(Interfaces)来定义对象类型。 接口Interfaces是对行为抽象,具体如何行动是由类classes去实现(implement)。...定义只读属性(只读约束存在于第一次给对象赋值时候,不是第一次给只读属性赋值时候) interface Person { readonly id: number; name: string...= arguments; } 函数类型 在 JS ,有两种常见定义函数方式——函数声明(Function Declaration)和函数表达式(Function Expression)。...参数默认 在ES6,允许给函数参数添加默认,TS 会将添加了默认参数识别为可选参数,因此可选参数可以不必须接在必需参数后面。

94920

《HTTP2 基础教程》 阅读摘要

对于很多 Web 页面,浏览器大块时间并不是用于呈现来自网站主体内容(通常是 HTML),而是在请求所有资源并渲染页面。...当然,这通常不是你能控制 保证低限度解析延迟。了解你 DNS 服务基础设施结构,然后从你最终用户分布所有地域定期监控解析时间 在 HTML 或响应利用 DNS 预取指令。...相比 h1,这些请求获得响应时间之和一般会更短;但是因为是请求是同时发出单个请求计时起点更早,所以 h2 统计到 TTFB 会更高。...2 设计意图是充分利用单个 socket 连接,拆分域名会违背这种意图。...服务端推送用于让资源更快到达浏览器, 资源预取相比推送优点之一是,如果资源已经在缓存里,浏览器就不会浪费时间和带宽重复请求它。所以,可以把它看作 h2 推送补充工具,不是将被替代特性。

1K20

深度解密setTimeout和setInterval——为setInterval正名!

哈哈苍天饶过谁,在相同时间,相同压力情况下,都出现了跳帧超时,不过两人原因不一样setTimeout压根没有执行,setInterval是因为抛弃了相同队列下相同定时器其他callback也就是保留了了队列第一个挤进来...JS是非阻塞 JS不仅是单线程,还是非阻塞语言,也就是说JS并不会等待某一个异步加载完成,比如接口读取,网络资源加载如图片视频。直接掠过异步,执行下方代码。那么异步函数岂不是永远无法执行了吗?...stack和queue 于是出现了stack和queue,stack是JS工作堆,一直不断地完成工作,然后将task推出stack。...然后queue(队列)就是下一轮需要执行task们,所有未执行而将执行task都将推入这个队列之中。...最后清除所有没有被标记对象,这样可以解决两对象互相引用,无法释放问题。 因为是从global开始标记,所以函数作用域内变量,函数完成之后就会释放内存。

2.9K30

前端性能优化

DOM编程优化 用JS操作DOM,是比较慢。为什么呢?首先,补充一下浏览器相关知识。下图为浏览器结构: ?...如图所示,当用JS引擎和渲染引擎是独立实现,两者通过桥接接口通信。DOM由渲染引擎绘制,所以,当JS改变DOM结构时,必须通过Bridge通知给渲染引擎,然后进行重排或者重绘。...+='hello'; } 改造(JS只读取一次DOM元素,但是,依旧多次更改DOM元素): // 获取一次container let container = document.getElementById...因为这些属性都需要实时计算得到,所以,浏览器为了取得正确,会进行重排!....} // 不推荐 // 浏览器会先查找所有的a标签,然后再找这些a标签哪些有span父标签... div span a {...}

88330

初学者应该了解数据结构:Array、HashMap 与 List

常用 JS 数组内置函数 函数 复杂度 描述 array.push(element1[, …[, elementN]]) O(1) 将一个或多个元素添加到数组末尾 array.pop() O(1)...然后使用JS 内置 splice 方法,它复杂度也是 O(n)。那(删除函数)总时间复杂度不是 O(2n) 吗?记住,(对于时间复杂度而言,)我们并不关心常量。...然而,在桶#0与桶#1都有两个。这是为什么呢?? 由于 HashMap 容量是2,尽管算出来 hash code 是不一样,当求余后算出所需放进桶编号时,结果不是桶#0就是桶#1。...我们将使用 Map 不是普通对象,这是由于 Map 键可以是任何东西而对象键只能是字符串或者数字。此外,Map 可以保持插入顺序。...进阶提示:另一个(将访问操作)时间复杂度从 O(n) 降至 O(log n) 方法是使用 二叉搜索树 不是数组进行底层存储。

1K20
领券