关于JavaScript中函数的总结
函数的定义
1.直接定义
function abs(x) {
if (x >= 0) {
return x;
} else {
return -x;
}
}
函数内部的语句在执行是,一旦执行到return时就执行完毕并将结果返回。如果没有return语句,函数执行完毕后也会返回结果,只是结果是undefined。
由于函数是一个对象,所以函数名可以视为指向该函数的变量。函数名可以保存在变量,对象,数组中。
函数还可以被当做参数传递给其他函数,函数也可以返回函数,函数拥有方法。
2.声明式定义
var abs = function (x) {
if (x >= 0) {
return x;
} else {
return -x;
}
};
将匿名函数赋值给了变量,通过变量可以调用该函数。
函数的调用
调用一个函数会暂停当前函数的执行,传递控制权和参数给新函数。除了声明的参数,函数还接收两个参数this和arguments。【this的值取决于函数的调用模式】
函数的调用模式
- 方法调用
- 函数调用
- 构造器调用
- apply调用
1.方法调用模式
当函数保存为对象的一个属性时,称为方法,当方法被调用是,this绑定到该对象。该方法可以用this来访问自己所属的对象,所以能从对象中取值或对对象进行修改。
通过this取得他们所属对象的上下文的方法称为公共方法。
2.函数模式的调用
当函数不是一个对象的属性时就是被当做一个函数来调用,this被绑定到全局。
解决方案:在函数内把this赋值给变量that
3.构造器模式
如果函数前面带上new调用,会创建一个连接到该函数prototype成员的新对象,this会被绑定到这个新对象上
4.Apply调用
apply构建一个参数数组传递给调用函数,apply方法接收两个参数,第一个是绑定this的值,第二个是参数数组,可以自己选择this的值
调用函数时,按顺序传入参数即可,由于JavaScript允许传入任意个参数而不影响调用,因此传入的参数比定义的参数多也没有关系,虽然函数内部并不需要这些参数;传入的参数比定义的少也没有问题,但由于收到的参数为undefined,计算结果为NaN,要避免收到undefined,可以对参数进行检查。
arguments
arguments只在函数内部起作用,并且永远执行当前函数的调用者传入的所有参数,类似Array,拥有length属性。
返回
当函数结束时,会把控制权交给调用该函数的程序。
return语句使函数提前返回,当return被执行时,函数立即返回而不再执行余下的语句。
一个函数总会返回一个值,如果没有就默认返回undefined。
如果函数调用是在前面加上new,且返回值不是一个对象,则返回this
异常
利用arguments可以获得调用者传入的所有参数,即使函数不定义参数,也可以拿到参数的值;而实际上arguments最常用语判断传入参数的个数