关于JavaScript中函数的总结

2018-10-25  本文已影响0人  Yanzery

函数的定义

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的值取决于函数的调用模式】

函数的调用模式

  1. 方法调用
  2. 函数调用
  3. 构造器调用
  4. 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最常用语判断传入参数的个数

rest参数

上一篇下一篇

猜你喜欢

热点阅读