函数也是对象。
属性:arguments.length表示实际传入的实参个数,arguments.callee.length表示期望传入的实参个数,eg:
function check(args){
var actual = args.length;
var expected = args.callee.length;
if(actual !== expected) {
throw Error("实参个数和期望参数个数不一致");
}
}
function f(x,y,z){
check(arguments);//检查
}
方法:call和apply方法,其作用基本相同,都可以用来代替另一个对象调用一个方法。其实就是更改对象的内部指针,即改变对象(包括函数)的this指向的内容。
对于apply和call两者在作用上是相同的,但两者在参数上有区别的。call([thisObj[,arg1[, arg2[, [,.argN]]]]]) apply([thisObj[,argArray]]) call函数和apply方法的第一个参数都是要传入给当前对象的对象,及函数内部的this。
bind方法,作用是将函数绑定至某个对象。但bind是ECMAScript5新增的方法。
function bind(f,o){ if(f.bind) { return f.bind(o); } else return function() { return f.apply(o,arguments); } }