JavaScript函数声明与函数表达式

151 阅读2分钟

函数声明与函数表达式的定义

(1)函数声明

函数声明: function 函数名(参数){ 函数体}

注:函数声明中的函数名必须有,参数非必须

function add(){} // 函数声明

(2)函数表达式

命名函数表达式:function 函数名(参数){函数体}

匿名函数表达式:function(参数){函数体}

注:函数表达式中的参数非必须,且命名函数表达式中的函数名也是非必须

var del = function del(){} // 命名函数函数表达式
var update= function(){} // 命名函数函数表达式
function(){} // 匿名函数表达式

函数声明与函数表达式的区别

(1)函数的定义

函数声明的函数名必须得写,而函数表达式中的函数名可写可不写。

为此可有通过是否有函数名将声明与表达式进行初步筛选,即没有函数名的肯定是函数表 达式,进一步我们可以结合前后语句判断该函数前是否有赋值符号“=”,如果有赋值符号则为函数表达式,否则函数声明。

(2)函数的调用

函数声明可以先调用再声明,而函数表达式则必须得先定义再调用。

举例

(1)函数声明

console.log('函数调用开始');
add();//正常
console.log('函数调用结束');
function add(x,y){
return(x+y);
}

因为函数声明有提升效果即在作用域内函数声明会提前(hoist),所以对函数声明可以先调用再声明

//上述表达式等价于

function add(x,y){
return(x+y);
}
console.log('函数调用开始');
add();
console.log('函数调用结束');

(2)函数表达式

console.log('函数调用开始');
sub();//报错
console.log('函数调用结束');
var sub = function(x,y){
return(x-y);
}

因为函数表达式没有提升效果,所以对函数表达必须先定义再调用,否则会报错

上述代码修改后即可运行

var sub = function sub(x,y){
return(x-y);
}
console.log('函数调用开始');
sub();//正常
console.log('函数调用结束');

(3)函数的执行

函数表达式可以直接在函数定义后面加小括号执行,而函数声明则不行

var mult = function(x,y){ return(x*y); }();//正常
function div(x,y){ return(x/y); }()//报错

对于函数声明与函数表达式的使用切记,函数声明可以先调用再声明,而函数表达式必须先定义再调用