JavaScript 定时器与执行机制解析
In 未分类 on 2016年05月15日 by view: 22,672
16

Timer

从 JS 执行机制说起

浏览器(或者说 JS 引擎)执行 JS 的机制是基于事件循环。

由于 JS 是单线程,所以同一时间只能执行一个任务,其他任务就得排队,后续任务必须等到前一个任务结束才能开始执行。

为了避免因为某些长时间任务造成的无意义等待,JS 引入了异步的概念,用另一个线程来管理异步任务。

同步任务直接在主线程队列中顺序执行,而异步任务会进入另一个任务队列,不会阻塞主线程。等到主线程队列空了(执行完了)的时候,就会去异步队列查询是否有可执行的异步任务了(异步任务通常进入异步队列之后还要等一些条件才能执行,如 ajax 请求、文件读写),如果某个异步任务可以执行了便加入主线程队列,以此循环。

玩转 npm
In 未分类 on 2016年03月10日 by view: 23,997
20

NPM

npm 本来是 Node.js 的包管理工具,但随着 JS 这几年的蓬勃发展,现在的 npm 已经成了几乎所有跟 JS 相关的工具和软件包的管理工具了,并且还在不断发展完善中。

本文从笔者的经验,总结了 npm 安装/卸载、更新、发布这几个最主要功能的正确使用姿势和一些小技巧,顺便从官网搬来了 npm3 处理依赖的重大变化。

Hey async, await me
In 未分类 on 2015年12月18日 by view: 7,932
5

背景

笔者在前面的文章介绍过如何使用 generator 来解决 callback hell,尽管现在多数浏览器特别是移动端浏览器还不支持该 ES2015 新特性,但你可以通过 Babel 等转换工具转化成 ES5 兼容的等效代码,从而在生产环境使用。

不过使用 generator 来解决 callback hell 似乎有点不务正业,毕竟 generator 是生成器,属于 Iterator 的一种,设计之初是用来生成一种特殊的迭代器的。

另外还有两点也可以算是 generator 解决 callback hell 问题的缺陷:

  1. generator 需要从 generator function 执行得到,而 generator function 执行之后只会返回一个 generator,不管里面是怎样的代码,与我们通常对函数的认知存在差异
  2. 如果想执行 generator function 的函数体,需要不断调用返回的 generator 的 next 方法,这样就决定了必须依赖 cobluebird.coroutine 等其他辅助代码或者手动执行 next,来保证 generator 不断 next 下去

Tips:文章 ES6 Generator 介绍有介绍 generator 和 generator function,以及它们之间的关系和区别。

Strong Mode 下严格的属性访问
In 未分类 on 2015年10月30日 by view: 2,372
1

最近在着手把手上的 Nodejs 代码全面升级到 strong 模式,strong 模式是 V8 实现的一种新的模式,主要的变化我在前面的文章中已经写过。

从报错开始

然而事情并没有想象中顺利,将所有文件第一行的'use strict' 换成'use strong' 之后,一运行,立马出现一个报错 TypeError: In strong mode, accessing missing property 'NODE_ENV' of #<Object> is deprecated。

查看代码发现是这行

看起来似乎是很莫名其妙的错误,就换了个模式而已,好端端的代码怎么报这样一个闻所未闻见所未见的奇葩错误呢?

是时候使用 ES 2015 了
In 未分类 on 2015年08月31日 by view: 4,603
4

在 Web 中使用 ES 2015

想要在浏览器端使用 ES 2015 最新语法,其实很简单,只需要一个转换器即可,Babel 是 ES 2015 最流行的转换器之一,Babel 加上各种插件和 polyfill 能基本上支持绝大部分新语法。

在你的构建中,插入一步使用 Babel 将 ES 2015 的代码转换成完全兼容 ES5 的代码的任务,你甚至都不必了解 Babel 的具体用法,就可以爽爽的开始写 ES 2015 代码了。

使用 gulp-babel 在需要的地方转换一下即可。

 

是时候升级你的 gulp 到 4.0 了
In 未分类 on 2015年07月29日 by view: 13,591
3



不得不说的废话

随着前端工程化的推进,相信越来越多的项目都用上了自动化构建。
对前端构建来说,使用最多的莫过于 gruntgulp

本文的主角是 gulp,所以花一两句话来介绍 gulp 还是有必要的。

gulp 是一款基于 stream 的前端构建工具,由于底层使用 stream,可以将多个任务无缝串连在一起,相比使用临时文件的 grunt 要快不少;同时也不用像 grunt 一样写一大堆配置文件,每一个任务都可以可编程的来完全控制逻辑。

gulp 比 grunt“快” 这是公认的事实,这里不再过多比较两者之间的差异,还是那句话,各有千秋吧。

Strong Mode 介绍
In 未分类 on 2015年06月30日 by view: 2,835
7
If it is too strong, then you are too weak.

就算是背景吧

随着 ES2015 的到来,JavaScript 引进了许多新特性,很多很强大的特性完全可以弥补 JS 本身语法上的弱点,比如让很多初次尝试 JS 的程序员感到不习惯的变量提升问题、没有块级作用域问题等问题。

strong mode

ES5 增加了 strict mode,现在 V8 又实现了一种新的模式——strong mode

strong modestrict mode 的升级版,在语法要求上更严格了,同时正因为这些严格的要求,让开发者得以规避语言本身一些糟粕或者让人困惑的地方。

关于 Promise 内存泄漏的问题
In 未分类 on 2015年05月30日 by view: 11,082
5

Promise

Promise

Promise 是 ES6 的新特性,在 ES6 之前各大浏览器、各种 polyfill 和各种 js 执行环境都针对 Promise 进行了自己的实现,不过实现上大同小异。

使用 Generator 解决回调地狱
In 未分类 on 2015年04月23日 by view: 11,471
10

callback hell

(图片来源于互联网)

回调地狱

相信每一个 JS 程序员都曾被或者正在被回调地狱所折磨,特别是写过 Nodejs 代码的程序员。

 

ES6 Generator 介绍
In 未分类 on 2015年03月30日 by view: 14,953
5