首页 > 代码库 > javascript新特性let,function*,yield,promise

javascript新特性let,function*,yield,promise

自从去了百度就好久没有更新博客了,看了以前写的东东,以前在小公司还是比较闲啊。讽刺的是这次又要换工作去小公司,才想起写篇博。。。

去了百度后先学了python,然后前面的GG走了,我也不想用python了,就全力转用nodejs了。

越来越喜欢上JS家族了,最近看了一下ECMA6的新特性,着实又增强了JS的生命力啊。看国外ASMJS大牛的视频说,JS的作者只用了10天就创造了这门语言。

所以希望ECMA能够继续进步。

废话多了些。下面干货来了。注意一下代码要用node --harmony执行,代码还要用strict模式运行。

let,其实就是块级作用域申明变量的var。之前JS的var关键字是非块级作用域的,而是函数级的。

例如arr=[0,1,2],我们经常写循环for(var i=0,len=arr.length; i < len; i++){},其实循环后这个i是还可以访问的2。这样就很容易污染环境变量。

如果用了let,for(let i=0,len=arr.length; i<len; i++){},这时循环后的i就是undefined的了。


function*,申明构造函数,返回{value:v,done:true_or_false}。构造函数可以调用next来获取下一个值,可以构造类似于随机数生成器。


yield和function*一起使用。在构造器函数中,yield可以暂停然后返回当前表达式的值。

例如function a(){yield 1;yield 2;}; var gen=a();console.log(gen.next());console.log(gen.next());console.log(gen.next());,结果是{value:1,done:false},{value:2,done:false},{value:undefined,done:true}.执行了构造a函数的第一行yield 1后,a函数退出并且保存上下文,当再次执行next时会恢复a函数上下文继续执行下一行b。


promise,这个非ECMA6特性,HTML5Rocks有篇文章写得挺好。主要是为了解决多层嵌套的问题。将嵌套回调转化成链式调用。


javascript新特性let,function*,yield,promise