在 js 中每个 JavaScript 函数实际上都是一个 Function 对象。
Function 的属性&方法
属性
Function.prototype.name: 返回函数实例的名称。Function.prototype.length: 返回函数实例的形参个数。Function.prototype.prototype: 返回将函数作为构造函数时创建的实例对象的原型,即new操作符创建的实例对象的原型。: 返回传入函数的实参,它是一个类数组对象。该属性是 废弃的,不推荐使用,可以使用函数内部可用的Function.prototype.argumentsarguments对象来访问函数的实参。: 返回调用指定函数的函数。该属性是 非标准的,不推荐使用。可以使用Function.prototype.callerarguments.callee.caller替代。: 返回函数的显示名称。该属性是 非标准的,不推荐使用。Function.prototype.displayName
原型方法(实例方法)
Function.prototype.apply(thisArg, argsArray): 调用一个具有给定this值的函数,以及以一个数组(或一个类数组对象)的形式提供的参数。Function.prototype.bind(thisArg[, arg1[, arg2[, ...argN]]]): 创建一个新的函数,在bind()被调用时,这个新函数的this被指定为bind()的第一个参数,而其余参数将作为新函数的参数,供调用时使用。Function.prototype.call(thisArg[, arg1[, arg2[, ...argN]]]): 使用一个指定的this值和单独给出的一个或多个参数来调用一个函数。Function.prototype.toString(): 返回一个表示当前函数源代码的字符串。
Function 构造函数与函数声明之间的不同
由 Function 构造函数创建的函数不会创建当前环境的闭包,它们总是被创建于全局环境,因此在运行时它们只能访问全局变量和自己的局部变量,不能访问它们被 Function 构造函数创建时所在的作用域的变量。这一点与使用 eval() 执行创建函数的代码不同。