1.在JavaScript中,函数就是对象。函数对象连接到 Function.prototype。
因为函数是对象,所有它们可以像任何其他值一样被使用。函数可以存放在变量、对象和数组中,函数可以被当做参数传递给其他函数,函数也可以再返回函数。函数还可以拥有方法。
函数的与众不同之处在于它们可以被调用。
2.函数的定义
var add = function(a, b){
return a + b;
};
function add(a, b){
return a + b;
};
这两种定义方式效果一样。
3.函数调用
除了声明时定义的形式参数,每个函数接受两个附加参数:this 和 arguments 。参数 this 的值取决于调用模式。javascript中有四种调用模式:方法调用模式、函数调用模式、构造器调用模式和apply调用模式。arguments是实际参数,它是一个数组,在函数内部可以直接访问。
当函数被调用时,实际参数(arguments)会按顺序赋值给形式参数。当实际参数(arguments)的个数和形式参数(parameters)的个数不匹配时,不会出错。如果实际参数过多了,超出的参数值将被忽略(但你还是可以通过arguments[ i ]来访问到它)。当实际参数过少,缺失的值将会被替换为undefined。对参数值不会进行类型检查:任何类型的值都可以被传递给参数。
4.函数调用模式
a.方法调用模式
当一个函数被保存为对象的一个属性时,我们称它为一个方法。当一个方法被调用时,this被绑定到该对象。在函数中通过this可以访问它所属对象的属性。
var obj = { "count":0, increment: function() { this.count +=1; } };
b.函数调用模式
当一个函数并非一个对象的属性时,它被当做一个函数来调用。此模式下,this被绑定到全局对象。
若在内部函数中希望访问到外部函数的this,可以在外部函数中定义一个变量that并赋值为this,内部函数通过that来访问到this;也可以通过给内部函数传递一个值为this参数,内部通过参数名来访问this。
c.构造器调用模式
在一个函数前面带上new来调用。
d.Apply调用模式
apply方法接收两个参数。第一个是将被绑定给this的值。第二个就是一个参数数组。
5.函数返回
一个函数总是会返回一个值。如果没有指定返回值,则返回 undefined。
如果函数以在前面加上 new 前缀的方式调用,且返回值不是一个对象,则返回this(该新对象)。
6.异常
javascript中的异常处理机制与java相似。在javascript中,通过 throw 语句可以抛出一个自定义的exception 对象,该exception对象可以是任何对象。
但在JavaScript内部的异常中,异常参数(即catch (e)中的e)是一个名为error的对象,可以通过new Error(message)来创建这个对象,异常的描述被作为error对象的一个属性message,可以由构造函数传入,也可以之后赋值。通过这个异常描述message,可以让程序获取异常的详细信息,从而自动处理。
function test(a){
throw new Error("err");
//throw "err"; 抛出的异常可以是任何对象,包括字符串、函数等。
}
try{
test();
}catch(e){
alert(e.message);
}