在谈论函数的声明与函数表达式之前,先看一下什么是变量提升。
javascript中有一个特别重要的机制就是变量提升,下面这段代码
console.log(a);
var a = 1;
实际上执行的是:
var a;
console.log(a);
a = 1;
可以看到变量a的定义被提前了。在看一下下面两个函数的定义:
function a(str)
{
return str==="hello";
}
var b = function(str)
{
return str==="hello";
}
执行:
a("hello") //正确
function a(str)
{
return str==="hello";
}
而执行:
b("hello");//错误
var b = function(str)
{
return str==="hello";
}
用函数声明创建的函数a可以在函数定义之前就进行调用;而用函数表达式创建的函数不能在b被赋值之前进行调用。原因就是javascript的函数提升机制(Javascript function hoisting)和运行时机(解析时/运行时)上的差异。
总结
Javascript 中函数声明和函数表达式是存在区别的,函数声明在javascript解析时进行函数提升,因此在同一个作用域内,不管函数声明在哪里定义,该函数都可以进行调用。而函数表达式的值是在javascript运行时确定,并且在表达式赋值完成后,该函数才能调用。
Javascript函数可以让javascript具有面向对象的一些特征,实现封装、继承等,也可以让代码得到复用。但是在运用javascript函数声明和函数表达式时一定要注意。