JavaScript之函数
在JavaScript中,函数是“第一等公民“,意味着函数可以像其它类型的数据一样,作为其它函数的参数,或者作为其它函数的返回值(也就是说函数可以返回函数)。
函数的原型对象:Function.prototype,它是一个函数,在函数上可以使用call,apply方法。
Function.prototype.call
一个函数的call()方法接收两类参数,第一类参数是指定上下文的this变量;第二类是调用函数自身所需的参数,该类参数若有多个的话则已逗号分隔。
Function.prototype.apply
函数的apply()方法与call()方法类似,它接收两个参数,第一个参数也是指定上下文的this变量;第二个是一个数组,该数组由调用函数自身所需的参数组成。
通过上面call和apply的描述,可发现其异同之处:相同的是它们都可以在调用函数的时候修改函数的上下文this指向;不同的是提供参数的方式不同。
JavaScript的函数中还包含这一个特殊的对象arguments,它是一个类数组对象。
类数组,它具有length属性,可以借助其length属性来遍历函数所接收到的所有参数;不过也就仅此而已,它不是真正的数组,无法在arguments上调用其他数组所具有的方法,当然了如果将其转换为真正的数组后,数组方法对它也是适用的。
arguments这个类数组对象的内容大致如下:
['param1', 'param2', 'param3', 'length', 'callee']
它的前半段元素由函数接收到的参数组成,除此之外还有两个元素,一个是length属性,arguments.length表示函数当前接收到的参数个数;arguments.callee提供了调用当前函数的函数引用,但现在不建议使用了。
前面涉及到了函数调用时的上下文this变量,这个this总是在函数被调用的时候基于调用者调用它的方式设置的。