函数声明语句通常出现在JavaScript代码的最顶层,也可以嵌套在其他函数体内。但在嵌套时,函数声明只能出现在所嵌套函数的顶部。所以,函数定义不能出现在if语句、while循环或其他任何语句中,正是由于函数声明位置的这种限制,ECMAScript标准规范并没有将函数声明归类为真正的语句。
函数声明语句和函数定义表达式包含相同的函数名,但二者仍然不同。两种方式都创建了新的函数对象,但函数声明语句中的函数名是一个变量名,变量指向函数对象。和通过var声明变量一样,函数定义语句中的函数被显式地“提前”到了脚本或函数的顶部。因此它们在整个脚本和函数内都是可见的。
脚本中的所有函数和函数中所有嵌套的函数都会在当前上下文中其他代码之前声明。也就是说,可以在声明一个JavaScript函数之前调用它。
和var语句一样,函数声明语句创建的变量也是无法删除的。但是这些变量不是只读的,变量值可以重写。
条件语句
条件语句是通过判定表达式的值来决定执行还是跳过某些语句。这些语句是代码的决策点,有时称为“分支”。如果说JavaScript解释器是按照代码的“路径”执行的,条件语句就是这条路径上的分叉点,程序执行到这里时必须选择其中一条路径继续执行。
switch语句是更复杂的多分支条件语句。
if语句
和大多数编程语言一样,JavaScript中的if、else匹配规则是,else总是和就近的if语句匹配。为了让例子可读性更强、更易理解、更方便维护和调试,应当适当地使用花括号:{},坚持这么做,可以避免程序出现的歧义。
使用else if更清晰 也更可取。
循环
为了理解条件语句,可以将在JavaScript中的代码想成一条条的分支路径。循环语句就是程序路径的一个回路,可以让一部分代码重复执行。最常用的循环就是对数组元素的遍历。
使用while(true)则创建了一个死循环。
JavaScript解释器
for(initialize;test;increment)
statement
initialize 初始化操作
test 循环条件判断
increment 计数器变量的更新
死循环 for(;;)
for(variable in object)
statement
variable 通常是一个变量名,也可以是一个可以产生左值的表达式或者一个通过var语句声明的变量,总之必须是一个适用于赋值表达式左侧的值。
statement是一个语句或语句块,它构成了循环的主体。
标签语句
语句是可以添加标签的,标签是由语句前的标识符和冒号组成:
identifier:statement
任何语句可以有很多个标签。
with 语句用于临时扩展作用域链,语法:
with(object)
statement
在对象嵌套层次很深的时候通常会使用with语句来简化代码编写。
——《JavaScript权威指南(第六版).(美)David.Flanagan.中文版》