JS中函数主要有函数声明式和函数表达式两种方式。
1.函数声明式
函数声明:使用function关键字声明一个函数,在指定一个函数名。
function fnName(){xxxx};
例如:
fnName();
function fnName(){
alert('Hello World');
}
上例运行正常,因为使用的是函数声明式,函数调用可以在函数声明之前。
2.函数表达式式
函数表达式:使用function关键字声明一个函数,但是未给函数命名,最后将匿名函数赋予给一个变量。
var fnName = function(){xxxx};
例如1:
fnName();
var fnName = function(){
alert('Hello World');
}
例如1报错,变量fnName还未保存对函数的引用,函数调用必须在函数表达式之后。
例如2:
var fnName = function(){
alert('Hello World');
}();
例如2正常,函数表达式后面加括号,当JavaScript引擎解析到此处时能立即调用函数。
例如3:
function fnName(){
alert('Hello World');
}();
例如3报错,JavaScript引擎只解析函数声明,忽略后面的括号,函数声明不会被调用。
3.匿名函数
匿名函数:使用function关键字声明一个函数,但是未给函数命名,所以叫匿名函数,匿名函数属于函数表达式。
function(){xxxx};
匿名函数有很多作用,赋予一个变量则创建函数,赋予一个事件则成为事件处理程序或者创建闭包等等。
例1:
function(){
alert('Hello World');
}();
例1语法错误,语法错误,虽然匿名函数属于函数表达式,但是未进行赋值操作,所以javascript引擎将开头的function关键字当做函数声明,报错:要求需要一个函数名。
例2:匿名函数不能直接调用
function () {
alert("error");
}
例3:直接使用
(function () {
alert(“Success”);
})()
例4:赋值调用
var anonymous=function () {
alert("success");
}
anonymous();
例5:传参
(function (m,n) {
return m+n;
})(10,20)
//===/赋值调用===
var anonymous=function (m,n) {
return m+n;
}
anonymous(15,20);