在 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() 执行创建函数的代码不同。