• 函数声明
  • 函数表达式(匿名函数)
  • 自调用函数
  • new Function

1. 函数声明

function foo () {
}

2. 函数表达式

var foo = function () {
}

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

1.函数声明必须有名字
2.函数声明会函数提升,在预解析阶段就已创建,声明前后都可以调用
3.函数表达式类似于变量赋值
4.函数表达式可以没有名字,例如匿名函数
5.函数表达式没有变量提升,在执行阶段创建,必须在表达式执行之后才可以调用
下面是一个根据条件定义函数的例子:
if (false) {
function f () {
alert(1);
}
}
f();
//函数声明如果写在if else中,不同浏览器会有不同的结果
//谷歌报错 :f is not a function
//ie8 alert(1)
//说明不同浏览器的预解析规则不太一样
不过我们可以使用函数表达式解决上面的问题:
var f
if (false) {
f = function () {
console.log(1)
}
}
//函数表达式不会像函数声明一样被强行提升

4. new Function()

//所有的函数实际上都是Function的构造函数创建出来的实例对象
var f1 = new Function(“num1”,”num2”,”return num1+num2”);