第五章 语法
{…}一个代码块会返回最后一个语句的结果值,可以用eval()去获得(不建议),{}在不同情况下意思不同,可以是语句块、对象常量、解构赋值或者命名函数参数,在代码块中有一个坑,{}+[]//0,{}是一个空执行块(不执行任何操作),最后+[]将[]强制类型转换为0。[]+{}//”[object object]”。Switch中的判断是一个严格相等的判断,这个一不注意就会出错。
在“&&”和“||”的判断中,前者的优先级高于后者的优先级,而且a&&b里,若a为假值,会返回a的值而不会再往下判断,而a||b里,若a为真值,会返回a的值而不会再往下判断。
第二部分 异步与性能
第一章 异步:现在与未来
JS是一门异步单线程语言,这是为了在用户交互时不会出现假死情况,优化用户体验。没有了并行就少了很多繁琐的状态,而利用异步编程模拟并发又可以让js效率提高,js有现在执行的函数,也有未来执行的函数。js的异步函数不会马上执行,而是先注册监听,等到事件触发了,就将这个回调函数压入事件队列中,等待顺序运行的任务队列空了以后,再执行事件队列中的函数。
第二章 回调
我们人类的大脑都适应了顺序的做每一个动作,所以可以看做类似于单线程运行的事件循环队列,就像js引擎一样。由于异步编程,一不小心js就容易形成回调地狱,而且回调中缺乏顺序性和可信任性容易造成控制反转,回调函数是js异步的基本单元,可是随着业务的发展和推进,复杂度越来越高,因此需要一种更同步、更顺序、更阻塞的方式来表达异步。
第三章 Promise
Promise提供了一种解决方式去处理现在值和未来值,每次执行promise的返回值都是一个promise对象,这样就意味着我们可以链式去调用,它有三种状态,状态只能改变一次,之后就不能再改变。Promise有三种状态决议,完成和拒绝,Promise对象可以传入两个参数resolve和reject,分别会调用两个函数,决议和拒绝函数。
第四章 生成器
在es6中提出了生成器generator的概念,这意味着代码可以在运行期间被暂停,然后等待命令继续往下执行,这种交替的暂停和恢复是合作性的而不是抢占性的。Function *foo(){},这就是一个生成器的声明,在函数里如果碰到了yield就会暂停执行,然后我们可以用next()去命令它往下运行,其中还能传参数,参数由对应位置的yield接收,而要启动生成器,我们首先得执行一次next()第一个next传任何参数都会被默认视为undefined,next()还包含了一个value属性,储存的是下一个位置的yield的值。生成器的优点就在于其内部的代码以自然的同步(顺序)方式表达任务的一系列步骤,为异步代码保持了顺序、同步、阻塞的代码模式。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。