King Mui

用艺术的眼光发现技术的美

Promise 对象用于表示一个异步操作的最终状态(完成或失败),以及该异步操作的结果值。

1
new Promise( function(resolve, reject) {...} /* executor */  );

Promise 构造函数执行时立即调用“处理器函数”(executor function), resolvereject 两个函数作为参数传递给“处理器函数”。“处理器函数”内部通常会执行一些异步操作,一旦异步操作执行完毕(可能成功/失败),要么调用 resolve 函数来将 promise 状态改成 fulfilled,要么调用 reject 函数将 promise 的状态改为 rejected。如果在“处理器函数”中抛出一个错误,那么该 promise 状态为 rejected

一个 Promise 有以下几种状态:

  • pending: 初始状态,既不是成功,也不是失败状态。
  • fulfilled: 意味着操作成功完成。
  • rejected: 意味着操作失败。
  • settled: 处在 fulfilledrejected 状态而不是 pending 状态。

因为 Promise.prototype.thenPromise.prototype.catch 方法返回 promise 对象, 所以它们可以被链式调用

阅读全文 »

设计模式的定义:在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案

当然我们可以用一个通俗的说法:设计模式是解决某个特定场景下对某种问题的解决方案。因此,当我们遇到合适的场景时,我们可能会条件反射一样自然而然想到符合这种场景的设计模式。

单例模式

单例模式的定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。实现的方法为先判断实例存在与否,如果存在则直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象。

阅读全文 »

算法(algorithm)的定义

算法是解题方案的准确而完善的描述,是一系列解决问题的清晰指令。其实就是解决一个问题的完整性描述

算法的效率

既然算法是解决问题的描述,而解决同一问题的方法也是多种多样的,只是在这过程中我们所使用的时间或时间以外的代价(计算机消耗的则为内存)不一样。为了更快、更好、更强的提高算法的效率,很多时候一个优秀的算法就在于它与其他实现同一问题的算法相比,在时间和空间(内存)上得到明显的降低。

算法的效率主要由以下两个复杂度来评估:

时间复杂度:评估执行程序所需的时间。可以估算出程序对处理器的使用程度。
空间复杂度:评估执行程序所需的存储空间。可以估算出程序对计算机内存的使用程度。

阅读全文 »

关于 Javascript

Javascript 是一门单线程语言,在最新的 HTML5 中提出了 Web-Worker,但 Javascript 是单线程这一核心仍未改变。所以一切的 Javascript 版“多线程”都是用单线程模拟出来的!

Javascript 事件循环

既然 JS 是单线程语言,那么就像只有一个窗口的银行,客户需要排队一个一个办理业务,同理 JS 任务也要一个一个的按顺序执行。如果一个任务耗时过长,那么后一个任务就必须等着。那么问题来了,假如我们想浏览新闻,但是新闻包含的超清图片加载很慢,难道我们的网页要一直卡着直到图片完全加载出来吗?因此聪明的程序员将任务分为两类:

阅读全文 »

为了能够更好地照顾不同的用户,一些网站会提供简繁两种版本切换,提高用户的体验。

思路

一般而言,网站要实现简繁字体的切换,需要先准备两套字体库。而基本的思路是:找到当前文字在字体库中的索引,然后根据索引值去另一套字体库中取出对应的文字,从而实现字体的替换。具体逻辑如下:

阅读全文 »