又到了平时要睡觉的时候了,内心理智的小人站起来,让自己的周末过得更轻松而不是更累和虚无。今天还是收集整理一些用户需求想过的东西,还是那句话要多问自己此刻我要如何做才最有效率?此刻我如何最能成功达成目标。晚上看了A199的技巧,感觉有一些我居然不知道,比如截图快捷键,多使用三个物理按键,停止某些应用程序后台启动等等。
然后又看了园子里的几篇文章不错,摘录一些作为今天的任务总结:
JavaScript 常见错误
字符串的 replace 方法如果第一个参数传入字符串,那么只有第一个匹配项会被替换。如果要替换全部匹配项,需要传入一个 RegExp 对象并指定其 global 属性。
"I'm a student, and you?".replace(/n/g,"N"); // I'm a studeNt, aNd you?
Date对象的月份是从0开始计数的(天却不是),即0代表一月,1代表二月…11代表12月。在调用Date实例的getMonth方法时尤其要注意
var d = new Date(2012, 4, 15); // 2012年5月15日
alert(d.getMonth()); // 结果为4
JavaScript其实是运行在单线程的环境中的,这就意味着定时器仅仅是计划代码在未来的某个时间执行,而具体执行时机是不能保证的,因为页面的生命周期中,不同时间可能有其他代码在控制JavaScript进程。在页面下载完成后代码的运行、事件处理程序、Ajax回调函数都是使用同样的线程,实际上浏览器负责进行排序,指派某段程序在某个时间点运行的优先级。
我们可以可以把JavaScript想象成在时间线上运行。当页面载入的时候首先执行的是页面生命周期后面要用的方法和变量声明和数据处理,在这之后JavaScript进程将等待更多代码执行。当进程空闲的时候,下一段代码会被触发
除了主JavaScript进程外,还需要一个在进程下一次空闲时执行的代码队列。随着页面生命周期推移,代码会按照执行顺序添加入队列,例如当按钮被按下的时候他的事件处理程序会被添加到队列中,并在下一个可能时间内执行。在接到某个Ajax响应时,回调函数的代码会被添加到队列。JavaScript中没有任何代码是立即执行的,但一旦进程空闲则尽快执行。定时器对队列的工作方式是当特定时间过去后将代码插入,这并不意味着它会马上执行,只能表示它尽快执行。
关于setTimeout/setInterval执行时机详细说明可以看看 setTimeout()和setInterval() 何时被调用执行