1、函数的定义(命名函数或者函数语句):
function myfunc(arg_1,arg_2,...,arg_n){
//执行一些语句
return "一些数据或者变量";
}
2、使用函数表达式定义函数(匿名函数): 将一段函数表达式存储在一个变量中。
函数表达式是一种可以用表达式(而不是语句)声明的未命名函数,也称为匿名函数。
var myfunc = function(arg_1,arg_2,...,arg_n){
//执行一些语句
return "一些数据或者变量";
}
函数表达式和函数语句的区别:
(1)当函数语句被定义的时候,在同一个脚本代码中被优先考虑。因此,无论该函数是在定义之前或定义之后都可以被脚本引用。
(2)函数表达式也可以被作为另一些函数或方法的参数。
(3)函数表达式和函数语句的区别还体现在内存管理和垃圾回收方面。
总结:
如果不是特殊的用途(例如用于定义对象的方法),不推荐使用函数表达式,因为函数语句相比起来更容易阅读和理解,与函数表达式相比,函数语句代码更为简洁而且
不容易混淆,因为函数表达式既需要var关键字又需要function关键字。
但是在某些情况下,函数表达式非常有用,一个常见用法就是将函数表达式用于那些使用一次后便丢弃的函数,这样有利于内存管理。另一个用法就是向 prototype 属性附加函数以实现对象方法的定义,这个用法在js面向对象编程时最常见。
3、匿名自执行函数
语法:
(function(){
// 执行一些语句
})();
有参数的
(function(arg_1,arg_2,arg_3){
// 执行一些语句
})(arg_1,arg_2,arg_3);
优点:
(1)由于函数是一个封闭的作用域范围,并且可以嵌套函数,所以可以使用这种函数来实现封装自己的所有函数和变量,从而避免来自多个开发者的相互冲突。
(2)由于他们位于同一个函数中,所以可以相互引用。(闭包)
(3)由于外部无法引用函数内部的变量,因此自执行完后很快被释放,这种机制不会污染全局对象。
(4)相当于定义了一个命名空间,来自不同的开发者的功能位于自己的命名范围内。
如何访问匿名自执行函数里面的函数和对象呢?
var o = new Object();
(function(_obj){
_obj.myfunc =function(){
};
})(o);
alert(o.myfunc());
最常用的是将全局对象window 作为参数传进去,这样函数或变量就成为全局函数和变量。
(function(window,undefind){
//Jquery定义
})(window);
4、使用Function 类定义函数
var functionName = new Function([arg1,arg2,arg3],functionBody);