第七章 function

       在javaScript中,函数有两种,一种是普通函数,一种是构造函数,然而本质上只有一种,构造函数只不过是我们为了区分功能自创的说法。构造函数我们约定函数的第一个字母大写。这里说一说Function类型,也就是说好所Function的实例:函数。 函数就是对象,还是类。既可以把它当作一个普通对象用,也可以通过new方法来有它创造一个实例。

  • 定义函数有两种方法,一种是声明方式定义,一种是表达式方式定义。这两个的区别在于函数的定义是在什么时候,如果函数的定义在表达式里,那么我们就说是表达式方式定义的。
  • 函数没有重载,同名的新函数会覆盖同名的旧函数。
  • 函数声明在js里,即使在调用语句之后也是可以的,这成为声明提升,这个特性针对变量也是一样的。
  • 函数可以做为参数和返回值存在。
  • 函数内部有两个特殊对象:this和arguments
  • 函数内部有两个特殊属性:callee,是一个指针,指向函数本身。caller:也是一个指针,指向调用当前函数的函数。a调用b,那么b里边的arguments.caller就指向a。
function a() {
    b();  //调用b
}

function b() {
    alert(b.caller);  //a.caller就指向a,相当于alert(a)
    alert(a);
}
a();
  • 函数有两个特殊的方法:apply()和call()。这两个函数都有一个作用,就是在特定的作用域内调用函数,使被调用的函数的this值变为我们设置的this值,这样就可以扩充函数运行的作用域,而且低耦合!ECMAScript5定义了一个bind()方法,也是差不多的效果。
function sum(num1,num2) {
    alert(num1+num2);
}

function sum1(num1,num2) {
    sum.apply(this,arguments);   //调用了sum函数,并且把sum1的this和arguments对象做为参数,也就是把sum的this变成了sum1的this,sum的arguments对象变成了sum1的arguments对象。
}

sum1(1,2);  //3
原文地址:https://www.cnblogs.com/jingubang/p/4630377.html