1. 定义
构造函数,创建一个新的function对象。 在 javascript 中, 每个函数实际上都是一个function对象。
2 名词字典
本文中出现变量名词的解释
1 | var oo = new Object(); |
| 变量名 | 含义 | 举例 |
|---|---|---|
| objectName | 相关对象类型名称 | 就像上面js代码中Object,Boolean,Number,String,Array,Date |
| varName | 相关对象类型实例化后的变量名 | 就像上面js代码中oo,oBool,oNum,oString,oArray,oDate |
| param1,param2,param3,…,paramN | 函数中需要传入第一个到第N个的参数值 | 就像上面js代码中true,68,hello world |
| functionName | 函数名称 | 就像上文的demoParent,demoChildren |
3. function的属性
3.1 继承对象的属性
3.2 函数的常用属性值
| 属性名 | 描述 | 使用方法 |
|---|---|---|
| arguments | 不推荐使用,属性代表传入函数的实参,它是一个类数组对象。已经被废弃很多年了,现在推荐的做法是使用函数内部可用的 arguments 对象来访问函数的实参。在函数递归调用的时候(在某一刻同一个函数运行了多次,也就是有多套实参),那么 arguments 属性的值是最近一次该函数调用时传入的实参。如果函数不在执行期间,那么该函数的 arguments 属性的值是 null。 |
functionName.arguments |
| arity | 已废弃,返回一个函数的形参数量,是一个古老的已经没有浏览器支持的属性,你应该使用length属性来代替.。 |
functionName.arity |
| caller | 不推荐使用,如果一个函数functionName是在全局作用域内被调用的,则functionName.caller为null,相反,如果一个函数是在另外一个函数作用域内被调用的,则functionName.caller指向调用它的那个函数,该属性的常用形式arguments.callee.caller替代了被废弃的arguments.caller。 |
functionName.caller |
| callee | 不推荐使用,callee放回正在执行的函数本身的引用,它是arguments的一个属性。 |
arguments.callee |
| displayName | 不推荐使用,获取函数的显示名称。 |
functionName.displayName |
| length | 指明函数的形参个数,length 是函数对象的一个属性值,指该函数有多少个必须要传入的参数,即形参的个数。形参的数量不包括剩余参数个数,仅包括第一个具有默认值之前的参数个数。与之对比的是,arguments.length 是函数被调用时实际传参的个数。 | functionName.length |
| name | 返回一个函数声明的名称,使用new Function(...)语法创建的函数或只是 Function(...) create Function对象及其名称为anonymous。 |
functionName.name |
| prototype | 函数对象具有属性__proto__,可称为隐式原型,一个对象的隐式原型指向构造该对象的构造函数的原型。 |
functionName.prototype |
3.3 注意
3.3.1 callee
- 这个属性只有在函数执行时才有效
- 它有一个length属性,可以用来获得形参的个数,因此可以用来比较形参和实参个数是否一致,即比较arguments.length是否等于arguments.callee.length
- 它可以用来递归匿名函数。
1 | var a = function() { |
3.3.2 length
- 请注意这个指的是形参的个数,如果参数在传入的时候是以已经定义的情况下,这个时候是不会被计算的
1 | console.log(Function.length); /* 1 */ |