看了很多关于函数表达式与声明之间的区别和用法简介,但是侧重点都有所不同,对于一个新手来说想要的答案总是需要综合不同的链接来学习,现根据最近的学习理解,对函数表达式与声明的用法进行总结,希望能有所帮助,如有不正确的地方望大神指正。
函数声明与函数表达式的定义
(1)函数声明
函数声明: function 函数名(参数){ 函数体}
注:函数声明中的函数名必须有,参数非必须
function add(){} // 函数声明
(2)函数表达式
命名函数表达式:function 函数名(参数){函数体}
匿名函数表达式:function(参数){函数体}
注:函数表达式中的参数非必须,且命名函数表达式中的函数名也是非必须
var del = function del(){} // 命名函数函数表达式
var update= function(){} // 命名函数函数表达式
function(){} // 匿名函数表达式
函数声明与函数表达式的区别
(1)函数的定义
函数声明的函数名必须得写,而函数表达式中的函数名可写可不写。
为此可有通过是否有函数名将声明与表达式进行初步筛选,即没有函数名的肯定是函数表达式,进一步我们可以结合前后语句判断该函数前是否有赋值符号“=”,如果有赋值符号则为函数表达式,否则函数声明。
(2)函数的调用
函数声明可以先调用再声明,而函数表达式则必须得先定义再调用。
函数声明
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('函数调用结束');
函数表达式
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); }()//报错
对于函数声明与函数表达式的使用切记,函数声明可以先调用再声明,而函数表达式必须先定义再调用