定义函数的方式有两种,一种是函数声明,另一种就是函数表达式。
函数声明的语法:
function sayHello(){ alert("hello") }
首先是function关键字,然后是函数名。
函数声明提升:可以先调用函数,而函数声明放在其后,因为执行函数前会读取函数声明
sayHello(); function sayHello(){ alert("hello") }
接下来是函数表达式创建函数的方法:
var sayHello = function(){ alert("hello") } sayHello();
这样创建的函数也成为 匿名函数(拉姆达函数) 因为function后面没有标识符。
当然了,用函数表达式创建的函数就不能像上面函数表达式创建的函数一样 先调用函数 再声明了 会报错(函数还不存在)。
千万不要这么做:
var a = false; if (a) { function sayHello(){ alert("hello") } }else{ function sayHello(){ alert("a is false") } };
表面上根据a的boolean值返回不同的函数,但是大多数浏览器会返回第二个声明(火狐会在a为true时返回第一个声明)。
那怎么办呢 , 使用函数表达式就没问题了:
var a = false; var sayHello; if (a) { sayHello = function(){ alert("hello") } }else{ sayHello = function(){ alert("a is false") } };
不同的函数会根据a的boolean值被赋值给sayHello。
能创建函数再赋值给变量,也就意味着函数可以作为其它函数的返回值返回:
function returnFunction(){ return function subFunction(){ alert("son function") } } var a = returnFunction() alert(a.name)
a.name = subFunction,还可以返回匿名函数:
function returnFunction(name){ return function(){ return name } } var a = returnFunction("white55开") var b = a() alert(b)
b = "white55开"
这并不是匿名函数唯一的用途,更多用途会在开发中遇到