1、函数声明(Function Declaration)
使用function关键字声明一个函数,再指定一个函数名,叫函数声明。如:
function 函数名() {javaScript代码}
2、函数表达式(Function Expression)
使用function关键字声明一个函数,但未给函数命名,最后将匿名函数赋予一个变量,叫函数表达式,这是最常见的函数表达式语法形式。如:
var fnName = function() {{javaScript代码};
//函数声明
function a(){
console.log(111);
}
//函数表达式
var b=function(){
console.log(222);
}
用函数声明创建的a,在a被定义之前就可以使用,但是用函数表达式创建的b,在b被赋值之前就不能使用。 这是因为变量声明a编译后函数声明和他的赋值都会被提前。也就是说函数声明过程在整个程序执行之前的预处理就完成了,所以只要处于同一个作用域,就可以访问到,即使在定义之前调用它也可以。而用函数表达式创建的函数编译后,变量声明b 会“被提前”了,但是他的赋值并不会被提前。而是在运行时进行赋值,且要等到表达式赋值完成后才能调用。
a();
function a(){
console.log(111);
}
b();
var b=function(){
console.log(222);
}
运行结果图:
函数声明正常,函数表达式因为没有被赋值而报错。