在 js 中每个 JavaScript 函数实际上都是一个 Function 对象。
Function 的属性&方法
属性
Function.prototype.name
: 返回函数实例的名称。Function.prototype.length
: 返回函数实例的形参个数。Function.prototype.prototype
: 返回将函数作为构造函数时创建的实例对象的原型,即new
操作符创建的实例对象的原型。: 返回传入函数的实参,它是一个类数组对象。该属性是 废弃的,不推荐使用,可以使用函数内部可用的Function.prototype.arguments
arguments
对象来访问函数的实参。: 返回调用指定函数的函数。该属性是 非标准的,不推荐使用。可以使用Function.prototype.caller
arguments.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()
执行创建函数的代码不同。