JavaScript权威指南笔记

原创
2016/12/13 20:45
阅读数 38

常量和局部变量

常量可以看成不可重复赋值的变量(对常量重新赋值会失败但不报错),对常量的重复声明会报错。

const pi=3.14;    //定义一个常量并赋值;
pi = 4;            //任何对这个常量的重新赋值都被忽略;
const pi = 4;        //重新声明常量会报错;
var pi = 4            //这里也会报错

关键字const和关键字var的行为非常类似,由于JavaScript中没有块级作用域,因此常量会被提前至函数定义的顶部。

关键字let有4种使用方式:

可以作为变量声明,和var一样;
·在for或for/in循环中,作为var的替代方案;
·在语句块中定义一个新变量并显式指定它的作用域;
·定义一个在表达式内部作用域中的变量,这个变量只在表达式内可用。


解构赋值

右侧的数组和对象中一个或多个的值被提取出来(解构),并赋值给左侧相应的变量名。除了用于常规的赋值运算符之外,解构赋值还用于初始化用var和let新声明的变量。

迭代

1.for/each循环

for/each循环并不仅仅针对数组本身的元素进行遍历,它也会遍历数组中所有可枚举属性的值,包括由数组继承来的可枚举方法。因此,通常并不推荐for/each循环和数组一起使用。

2.迭代器

迭代器是一个对象,这个对象允许对它的值集合进行遍历,并保持任何必要的状态以便能够跟踪到当前遍历的“位置”。
迭代器必须包含next()方法,每一次调用next()都返回集合中的下一个值

3.生成器

任何使用关键字yield的函数(哪怕yield在代码逻辑中是不可达的)都称为“生成器函数”(generator function)。生成器函数通过yield返回值。这些函数中可以使用return来终止函数的执行而不带任何返回值,但不能使用return来返回一个值。除了使用yield,对return的使用限制也使生成器函数更明显地区别于普通函数。然而和普通的函数一样,生成器函数也通过关键字function声明,typeof运算符返回"function",并可以从Function.prototype继承属性和方法。但对生成器函数的调用却和普通函数完全不一样,不是执行生成器函数的函数体,而是返回一个生成器对象。
生成器是一个对象,用以表示生成器函数的当前执行状态。它定义了一个next()方法,后者可恢复生成器函数的执行,直到遇到下一条yield语句为止。这时,生成器函数中的yield语句的返回值就是生成器的next()方法的返回值。如果生成器函数通过执行return语句或者到达函数体末尾终止,那么生成器的next()方法将抛出一个StopIteration。
4.数组推导

数组推导包含三个部分:

一个没有循环体的for/in或for/each循环。这部分推导包括一个变量(或者通过解构赋值得到的多个变量),它位于关键字in的左侧,in的右侧是一个对象(例如,这个对象可以是一个生成器、可迭代对象或数组)。尽管这个对象后面没有循环体,这段数组推导也能正确执行迭代,并能给指定的变量赋值。注意,在变量之前没有关键字var和let,其实这里使用了隐式的let,在数组推导中的变量在方括号的外部是不可见的,也不会覆盖已有的同名变量。
·在执行遍历的对象之后,是圆括号中的关键字if和条件表达式,目前,这个条件表达式只是用做过滤迭代的值。每次for循环产生一个值之后会判断条件表达式。如果条件表达式返回false,则跳过这个值,这个值也不会被添加至数组当中。if从句是可选的,如果省略的话,相当于给数组推导补充一条if(true)从句。
·在关键字for之前是expression,可以认为这个表达式是循环体。在迭代器返回了一个值并将它赋给一个变量,且这个变量通过了conditional测试之后,将计算这个表达式,并将表达式的计算结果插入到要创建的数组中。
5.生成器表达式

生成器表达式的返回值是一个生成器对象,而不是一个数组。

函数简写

如果函数只计算一个表达式并返回它的值,关键字return和花括号都可以省略,并将待计算的表达式紧接着放在参数列表之后

多catch语句

在catch从句的参数中加入关键字if以及一个条件判断表达式

12章

用Rhino脚本化Java

用Node实现异步I/O

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
在线直播报名
返回顶部
顶部