第3章:函数作用域和块作用域
区分函数声明和表达式最简单的方法是看 function 关键字出现在声明中的位 置(不仅仅是一行代码,而是整个声明中的位置)。如果 function 是声明中 的第一个词,那么就是一个函数声明,否则就是一个函数表达式。
函数声明和函数表达式之间最重要的区别是它们的名称标识符将会绑定在何处。
一、匿名函数和具名函数
setTimeout( function() {
console.log("I waited 1 second!");
}, 1000 );
这叫作 匿名函数表达式 ,因为 function().. 没有名称标识符。
函数表达式可以是匿名的, 而函数声明则不可以省略函数名——在 JavaScript 的语法中这是非法的。
二、块级作用域
尽管函数作用域是最常见的作用域单元,当然也是现行大多数 JavaScript 中最普遍的设计 方法,但其他类型的作用域单元也是存在的,并且通过使用其他类型的作用域单元甚至可 以实现维护起来更加优秀、简洁的代码。
尽管你可能连一行带有块作用域风格的代码都没有写过,但对下面这种很常见的 JavaScript 代码一定很熟悉:
for (var i=0; i<10; i++) {
console.log( i );
}
我们在 for 循环的头部直接定义了变量 i ,通常是因为只想在 for 循环内部的上下文中使 用 i ,而忽略了 i 会被绑定在外部作用域(函数或全局)中的事实。