函数类别区分
1.匿名函数:function (){}
这种函数由于没有名字,不能通过一个函数名引用他,所以不能像构造函数和普通函数一样多次调用。如果将函数赋值给变量也可以实现多次调用。
//将匿名函数赋值给变量可以利用变量实现多次调用 var test = function (){};
匿名函数通常用在将函数作为参数传递、将函数作为返回值返回的地方,由于该函数没有函数名只能将整个函数体当做参数或返回值。
该函数通常用于事件绑定。
该函数的返回值可以手动 return 任意类型的值。
2.立即执行函数 //声明和调用放在一起 =====》(function(){})();
立即执行函数顾名思义就是声明后立即执行的函数 执行到该自执行函数的时候 js会去对它求解得到返回值, 由于返回值是一 个函数, 故而遇到()时, 便会被执行。
这种函数也属于匿名函数的一种,因为立即执行函数不能多次调用,给他一个函数名没有太大的用处,所以通常是匿名函数,该函数的返回值可以手动 return 任意类型的值。
这种函数可以看做匿名函数的另外一种用法。
立即执行函数与其他函数的调用方式略有区别。
该函数主要用于,需要执行一个操作但是这种操作只执行一次并且不想让函数内的变量保存或造成全局污染,立即执行函数是一个不错的选择。
该函数与匿名函数的区别就是立即执行函数声明后立即执行,且只执行一次,也不能将函数作为值赋值给变量实现多次调用。
3.构造函数 构造函数主要是用来创建对象的函数
function Person(name,age){ this.name = name; this.age = age; } //构造函数的调用方式 var me = new Person('Me',30);
该函数与其他函数的最明显的区别就是要用 new 关键字调用,用 new 关键字调用的时候,函数返回一个对象因此达到创建对象的效果。
该函数的返回值如果手动return的是基本类型的值会忽略不会返回,如果return的是引用类型的值则返回该值,也就是说构造函数只返回引用类型的值。
构造函数一般用于工厂化创建对象、作为类使用等地方。
4.普通函数 普通函数是指通过function关键字声明的有函数名且 不用new直接用函数名调用的函数
function sum(a,b){ console.log( a+b); } //普通函数的调用方式 sum(2,3);
这种函数由于有函数名可以多次调用,也可以作为值赋值给变量也可以作为参数传递,该函数可以利用函数名实现作为参数或返回值。
该函数的返回值可以是任意类型的值,普通函数可以采用构造函数、立即执行函数、匿名函数的使用方式。
也就是说构造函数、匿名函数、立即执行函数这些用法,是在普通函数的基础上发展的一些用法
该函数与匿名函数的区别就是有函数名,可以通过函数名调用。
该函数与立即执行函数的区别是能够多次调用执行,也可以赋值给变量等操作。
该函数通常用于封装一个单独功能的代码,也就是说该函数可以独立完成一个操作或功能,提高代码的复用性。
在提高代码复用行方面立即执行函数和匿名函数表现的不是很明显。
总结:
匿名函数、立即执行函数与构造函数 、普通函数的区别在于没有函数名,且不能多次调用
构造函数与另外三类函数的区别在于 用new关键字调用且只返回引用类型的值