函数声明:在js解析的时候进行函数提升,所以在同一个作用域内,不管函数声明在哪里定义,该函数都可以调用;
函数表达式:在js运行时确定,并且在表达式执行完之后才可以调用;
一、调用方式:通过俩段代码来更直观的描述:
//函数声明
funDeclaration('前——调用');
function funDeclaration(value){
console.log('当前执行的是:',value);
//当前执行的是: 前——调用
//当前执行的是: 后——调用
}
funDeclaration('后——调用');
通过上述代码可以看出,在声明之前和之后调用,都可以成功执行到,这得益与函数声明在js解析的时候就进行了函数的提升,所以在同一个作用域里面,不管在哪里声明函数都可以执行到;
//函数表达式
funExpression('前——调用');//error
var funExpression=function(value){
console.log('函数表达式当前执行的是:',value);
}
funExpression('后——调用');//函数表达式当前执行的是: 后——调用
通过上述代码可以看出,在函数表达式声明之前调用,会报错,在表达式声明之后可以成功执行,这是因为函数表达式在js运行时才可以确认,并且在赋值结束之后才可以调用;
二、自执行函数的差别:
函数表达式的自执行函数不需要用()来包裹函数体
//函数表达式的自执行函数
var fun1=function(value){
console.log('函数表达式当前执行的是:',value);
//函数表达式当前执行的是: 函数表达式的自执行函数
}('函数表达式的自执行函数');
函数声明的自执行函数需要用()来包裹函数体
//函数声明的自执行函数
(function fun2(value){
console.log('函数表达式当前执行的是:',value);
//函数表达式当前执行的是: 函数声明的自执行函数
})('函数声明的自执行函数');
上述就是常见的俩者的区别,如果有遗漏很错误,希望大家及时指出!!!