JavaScript 内存管理机制

每种编程语言都有它的内存管理机制,比如C语言底层一般有内存管理接口malloc()free()。JavaScript是在创建变量(对象,字符串等)时自动进行了分配内存,并且在不使用它们时“自动”释放,释放的过程称为垃圾回收。正因为这种自动“释放”内存的机制,让JavaScript开发者错误的认为他们可以不用关心内存管理,实际上包括我自己在实际的JS项目开发中也很少关注其内存管理问题。

继续阅读…

面试题之-扁平化数组

面试中经常会遇到一道扁平化数组的题目:写一个函数,将输入数组 [1, [2, [3, [4]], 5]] 转化为 [1, 2, 3, 4, 5]的形式。

一开始,我以为是通过此题来考察递归的使用,后来仔细一想,事情远远不止这么简单,本文试着通过几种方式的实现,来理解此题可能要考察的内容。

继续阅读…

Vue.nextTick()异步更新方法解析

Vue 在更新 DOM 时是异步执行的。只要侦听到数据变化,Vue 将开启一个队列,并缓冲在同一事件循环中发生的所有数据变更。如果同一个 watcher 被多次触发,只会被推入到队列中一次。这种在缓冲时去除重复数据对于避免不必要的计算和 DOM 操作是非常重要的。然后,在下一个的事件循环“tick”中,Vue 刷新队列并执行实际 (已去重的) 工作。Vue 在内部对异步队列尝试使用原生的 Promise.thenMutationObserversetImmediate,如果执行环境不支持,则会采用 setTimeout(fn, 0) 代替。

继续阅读…

Promise/A+规范

An open standard for sound, interoperable JavaScript promises—by implementers, for implementers.

Promise表示异步操作的最终结果。与之进行交互的主要方式是通过then方法,该方法通过注册回调以接收promise的最终值或promise未完成的原因。

继续阅读…