随笔分类 -  javascript

摘要:这本书中就像它前言中说的那样,这本书不是给初学者的。需要一定的基础,而且有一定的编码实践,才能很好的理解书里讲到的内容。学习一门编程语言,需要熟悉它的语法、形式和结构,这样才会编写合法的、符合语义的、具有意义和行为正确的程序。此书的目的是加深理解如何有效地使用js构建更可预测的、可靠和可维护的js应 阅读全文
posted @ 2016-08-09 13:55 脚后跟着猫 阅读(2128) 评论(3) 推荐(6)
摘要:前言 这一章的内容学到了事件队列和异步的API。js只是运行在其他应用程序的脚本语言。js即依赖于应用程序,也独立与应用程序。可以使它可以在多平台,多种环境上运行。ECMAScript标准中没有关于并发的说明。这章讨论的是一些常用的方法,使用事件和异步API是js编程的基础部分。异步API,有set 阅读全文
posted @ 2016-08-05 18:34 脚后跟着猫 阅读(646) 评论(0) 推荐(1)
摘要:构建异步API的一种流行的替代方式是使用promise(有时也被称为deferred或future)模式。已经在本章讨论过的异步API使用回调函数作为参数。 基于promise的API不接收回调函数作为参数。相反,它返回一个promise对象,该对象通过其自身的then方法接收回调函数。 这里看不出 阅读全文
posted @ 2016-08-04 17:52 脚后跟着猫 阅读(429) 评论(0) 推荐(0)
摘要:设想有downloadAsync函数的一种变种,它持有一个缓存(实现为一个Dict)来避免多次下载同一个文件。在文件已经被缓存的情况下,立即调用回调函数是最优选择。 通常情况下,它会立即提供数据,但这种方式是违反了异步API客户端的期望。首先,它改变了操作的预期顺序。第62条显示了下面的例子,对于循 阅读全文
posted @ 2016-08-02 18:19 脚后跟着猫 阅读(491) 评论(0) 推荐(0)
摘要:第63条建议使用工具函数downloadAllAsync接收一个URL数组并下载所有文件,结果返回一个存储了文件内容的数组,每个URL对应一个字符串。downloadAllAsync并不只有清理嵌套回调函数的好处,其主要好处是并行下载文件。我们可以在同一个事件循环中一次启动所有文件的下载,而不用等待 阅读全文
posted @ 2016-07-29 13:48 脚后跟着猫 阅读(356) 评论(0) 推荐(0)
摘要:第61条解释了异步API怎样帮助我们防止一段程序阻塞应用程序的事件队列。使用下面代码,可以很容易使一个应用程序陷入泥潭。 而且它并不需要一个无限循环来写一个缓慢的程序。代码需要时间来运行,而低效的算法或数据结构可能导致运行长时间的计算。效率不是js唯一关注的。基于事件的编程的确强加了一些特殊的约束。 阅读全文
posted @ 2016-07-28 09:47 脚后跟着猫 阅读(517) 评论(0) 推荐(0)
摘要:假设需要有这样一个函数,接收一个URL的数组并尝试依次下载每个文件直到有一个文件被成功下载。如果API是同步的,使用循环很简单实现。 在异步情况下,上面的这种方式就无法正确工作。因为不能在回调函数中暂停循环并恢复。如果尝试使用循环,它将启动所有的下载,这不是等待完成一个再进行下一个。 这里我们要实现 阅读全文
posted @ 2016-07-27 14:27 脚后跟着猫 阅读(1414) 评论(0) 推荐(0)
摘要:管理异步编程的一个是错误处理。同步代码中只要使用try语句块包装一段代码很容易一下子处理所有的错误。 try语句块 但对于异步的代码,多步的处理通常会被分隔到事件队列的单独轮次中,因此,不可能将它们包装在一个try语句块中。事实上异步的API甚至根本不可能抛出异常,因为,当一个异步的错误发生时,没有 阅读全文
posted @ 2016-07-22 12:00 脚后跟着猫 阅读(394) 评论(0) 推荐(1)
摘要:异步程序的操作顺序 61条讲述了异步API如何执行潜在的代价高昂的I/O操作,而不阻塞应用程序继续处理其他输入。理解异步程序的操作顺序刚开始有点混乱。例如,下面的代码会在打印"finished"之前打印“starting”,即使这两个动作的程序源文件中以相反的顺序呈现。 downloadAsync调 阅读全文
posted @ 2016-07-21 18:09 脚后跟着猫 阅读(408) 评论(0) 推荐(0)
摘要:js程序是构建在事件之上的。输入可能来自不同的外部源。在一些语言中,我们习惯地编写代码来等待某个特定的输入。 像这样的形式downloadSync称为同步函数(或阻塞函数)。程序会停止做任何工作,而等待它的输入。在这个例子中,也就是等待从网络上下载文件的结果。由于在等待下载完成的期间,计算机可以做其 阅读全文
posted @ 2016-07-15 18:37 脚后跟着猫 阅读(385) 评论(0) 推荐(0)
摘要:前言 又到了一章的总结,这章里的内容。是把我从一个代码的使用者,如何换位成一个代码的编写者。如何让别人用自己的代码更容易,不用去注意太多的无用细节,不用记住冗长的函数名。在使用API时怎样避免使用者会出现理解的偏差。如何处理一些特殊敏感的值,参数如何设置可以更好地自说明,如何减少API对状态的依赖, 阅读全文
posted @ 2016-07-11 17:59 脚后跟着猫 阅读(538) 评论(0) 推荐(1)
摘要:无状态的API的部分能力是将复杂操作分解为更小的操作的灵活性。一个很好的例子是字符串的replace方法。由于结果本身也是字符串,可以对前一个replace操作重复执行替换。这种模式的一个常见用例是在将字符串插入到HTML前替换字符串的特殊字符字母。 对replace的第一次调用返回一个将所有特殊字 阅读全文
posted @ 2016-07-11 17:55 脚后跟着猫 阅读(276) 评论(0) 推荐(0)
摘要:js是弱类型语言。许多标准的操作符和代码库会把输入参数强制转换为期望的类型而不是抛出错误。如果未提供额外的逻辑,使用内置操作符的程序会继承这样的强制转换行为。 强制转换 强制转换可以带来方便性,但也会带来相关的麻烦,一些错误无法显露出来,导致程序行为的不稳定和难以调试。当强制转换与重载的函数一起工作 阅读全文
posted @ 2016-07-08 09:01 脚后跟着猫 阅读(361) 评论(0) 推荐(0)
摘要:示例 设想有两个不同类的API。第一个是位向量:有序的位集合 enable方法被重载了,可以传入一个索引或索引的数组。第二个类的API是字符串集合:无序的字符串集合 其中add方法被重载了,除了可以接收字符串和字符串数组外,还可以接收一个字典对象。 函数重载 为了实现BitVerctor.proto 阅读全文
posted @ 2016-07-06 18:26 脚后跟着猫 阅读(565) 评论(0) 推荐(0)
摘要:想象创建wiki的库。wiki网站包含用户可以交互式地创建、删除和修改的内容。许多wiki都以简单、基于文本标记语言创建内容为特色。通常,这些标记语言只提供了HTML可用功能的一个子集,但是却有一个更简单、更清晰的源格式。例如,环绕星号的文本被格式化为粗体,环绕下划线的被格式化为带有下划线的文本,环 阅读全文
posted @ 2016-07-05 18:32 脚后跟着猫 阅读(390) 评论(0) 推荐(1)
摘要:API有时被归为两类:有状态的和无状态的。无状态的API提供的函数或方法的行为只取决于输入,而与程序的状态改变无关。字符串的方法是无状态的。字符串的内容不能被修改,方法只取决于字符串的内容及传递给方法的参数。不管程序其他部分的情况,表达式"foo".toUpperCase()总是产生"FOO"。相反,Date对象的方法却是有状态的。对于相同的Date对象调用toString方法会产生不同的结果,这取决于Date的各种set方法是否已经将Date的属性修改。 阅读全文
posted @ 2016-07-04 18:08 脚后跟着猫 阅读(332) 评论(0) 推荐(0)
摘要:早期版本中的条件逻辑如果不需要默认值则会避免计算默认值。只要计算默认值对诸如修改用用户接口或发送网络请求没有影响,那么这不是一个问题。 判断一个值是否已经提供了的逻辑。在早前版本中,对于字符串参数,我们将空字符串视为undefined等价。只将undefined视为缺省的参数更恰当。使用或(||)操作符是一个提供默认参数值有效但非一致的策略。 一致性是库设计的一个良好目标,因为它会给api的使用者带来更好的可预测性。 阅读全文
posted @ 2016-07-04 15:06 脚后跟着猫 阅读(751) 评论(0) 推荐(0)
摘要:undefined值很特殊,每当js无法提供具体的值时,就会产生undefined。 undefined值场景 未赋值的变量的初始值即为undefined。var x; x;//undefined 访问对象不存在的属性也会产生undefined。var obj={}; obj.x;//undefined 一个函数体结尾使用未带参数的return语句,或未使用return语句都会返回值undefin 阅读全文
posted @ 2016-07-01 16:39 脚后跟着猫 阅读(535) 评论(0) 推荐(3)
摘要:不要修改这样的约定。比如前端要处理多种语言html,css,js本来要记得东西都够多的啦。不要引入一些不必要的改变,使工作变得复杂。就像在css中我们在描述矩形的四条边的参数时,总是以上右下左的顺序。因为这个和margin,padding等属性约定相同顺序。如果违反了这个约定,页面表现一定会出错。 阅读全文
posted @ 2016-07-01 16:37 脚后跟着猫 阅读(385) 评论(0) 推荐(0)
摘要:讨论对象这个在js中的万能的数据结构。对象可以表式为多种的形式,表示为字典和数组之间的区别。更多的我觉得这章讨论多的是一些对应实现功能的相关操作,有可能出现的bug以及如何避免来修复这些bug。比如下面会说到的for...in枚举属性的操作,可能因为对原型的一些操作,最终造成数据对象的操作的破坏。对于属性顺序有要求的如何处理,对类数组如何处理等。 阅读全文
posted @ 2016-06-30 09:32 脚后跟着猫 阅读(899) 评论(0) 推荐(0)

返回
顶部