摘要:
Module 即模块,来看下RequireJS怎么定义 Module :1. 简单的名值对?// Inside file my/shirt.js:define({color: "black",size: "unisize"});2. 定义成一个Function?// my/shirt.js now does setup work// before returning its module definition.define(function () {// Do setup work herereturn {color: "black" 阅读全文
摘要:
对于浏览器端来说,大多数事件都是异步的,但是有部分事件却不是,这部分事件称做同步事件,因此它们都是立即执行的,完全不理会前几篇文章中所提到的事件队列。以及浏览器的渲染、重绘等操作,也会打乱之前我们好不容易所建立起来的事件队列的概念。不过,本篇将会陆续不断的把这些坑给填上。同步事件DOM改变事件(DOM Mutation events)下面的Demo便用于说明同步事件之一的DOM Mutation events(注:该事件不支持Chrome浏览器)。123456789101112131415161718192021<a href="http://heroicyang.com/&q 阅读全文
摘要:
对于浏览器内部,大部分操作都是异步的生成事件并添加到JavaScript引擎线程的队列中,然后由JavaScript引擎线程进行调度执行。因此浏览器的很多事件都是和JavaScript相结合的,但是也有一些内部的限制。首先我们非常确定JavaScript是单线程的,对于浏览器来说,一个窗体中只有一个JavaScript引擎线程。而其他的行为,如:渲染、下载等是由单独的线程进行管理的,且具有不同的优先级。异步事件前面提到大多数事件都是异步的,触发的时候就将回调函数添加到事件队列。浏览器提供了一个内部的回路,也就是之前所谈到的Event Loop,由它来负责检查队列和处理事件、执行函数等。详细可参 阅读全文
摘要:
定时器其实并不是JavaScript提供的,而是由浏览器(对于前端来说)提供的。所以setTimeout()和setInterval()这两个方法均是通过浏览器的顶层对象window进行调用,可能平时大家在使用的过程中也会省去window而直接使用这两个方法。这两个方法所接收的参数都一样:12setTimeout(func|code, delay);setInterval(func|code, delay);这两个方法总是被简单的认为:在多少毫秒之后就执行里面的函数或者每间隔多少毫秒就执行里面的函数,基于这种理解的话会遇到很多匪夷所思的坑。而结合上篇文章中所提到的执行队列来解释的话,很多疑问都 阅读全文
摘要:
最近在学习Nodejs的过程中深入的了解了异步编程这个概念,为了更好的使用Nodejs,这些概念不可不知。在以前作为一个JavaScript用户的时候,完全是不知道它是怎么运行的,对好些概念也是“知其然不知其所以然”。对于客户端的JavaScript和Nodejs来说其实差距不是很大,这回就从客户端方面来说说Event Loop这个概念吧,算是异步编程的一个切入点吧。其实jQuery的作者John Resig在几年前就写了一篇好文章How JavaScript Timers Work,来讲述timer和事件在浏览器中是怎样工作的,我也是通过这篇文章才“知其所以然”。问题场景先来看看一段代码:1 阅读全文
摘要:
原文:John Resighttp://ejohn.org/blog/how-javascript-timers-work/How JavaScript Timers Work从基础的层面来讲,理解JavaScript的定时器是如何工作的是非常重要的。计时器的执行常常和我们的直观想象不同,那是因为JavaScript引擎是单线程的。我们先来认识一下下面三个函数是如何控制计时器的。var id = setTimeout(fn, delay);- 初始化一个计时器,然后在指定的时间间隔后执行。该函数返回一个唯一的标志ID(Number类型),我们可以使用它来取消计时器。var id = setIn 阅读全文