建议18:比较function语句和function表达式
在JavaScript语言中,既有function语句,也有函数表达式,这是令人困惑的,因为它们看起来是相同的。一个function语句就是值为一个函数的var语句的简写形式。
下面的语句:
- function f() {}
相当于: - var f=function() {}
这里建议使用第二种形式,因为它能明确表示f是一个包含一个函数值的变量。要用好JavaScript这门语言,理解函数就是数值是很重要的。
function语句在解析时会被提升,这意味着不管function被放置在哪里,它都会被移动到定义时所在作用域的顶层。这放宽了函数必须先声明后使用的要求,当然这也会造成混乱。
在if语句中也是禁止使用function语句的。大多数的浏览器都允许在if语句中使用function语句,但它们在解析function语句的处理上各不相同,因此造成了可移植性方面的问题。
根据官方的语法约定,一个语句不能够以一个函数表达式开头,而以单词function开头的语句是一个function语句。解决这个问题的方法就是把函数表达式括在一个圆括号之中。
- (function () {
- //…
- }());