Movatterモバイル変換


[0]ホーム

URL:


MDN Web Docs

此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

Function

BaselineWidely available *

Function 对象提供了用于处理函数的方法。在 JavaScript 中,每个函数实际上都是一个Function 对象。

构造函数

Function()

创建一个新的Function 对象。直接调用此构造函数可以动态创建函数,但会遇到和eval() 类似的安全问题和(相对较小的)性能问题。然而,与eval() 不同的是,Function 构造函数创建的函数只能在全局作用域中运行。

实例属性

以下属性定义在Function.prototype 上,并且被所有Function 实例共享。

Function.prototype.arguments已弃用非标准

表示传递给该函数的参数。对于严格模式、箭头函数、异步函数和生成器函数,访问arguments 属性会抛出TypeError 异常。请改为在函数闭包内使用arguments 对象。

Function.prototype.caller已弃用非标准

表示调用该函数的函数。对于严格模式、箭头函数、异步函数和生成器函数,访问caller 属性会抛出TypeError 异常。

Function.prototype.constructor

创建实例对象的构造函数。对于Function 实例来说,初始值是Function 构造函数。

以下属性是每个Function 实例的自有属性。

displayName非标准可选

函数的显示名称。

length

指定函数期望的参数个数。

name

函数的名称。

prototype

在使用function 作为构造函数与new 运算符一起使用时,用作新对象的原型。

实例方法

Function.prototype.apply()

使用给定的this 值和可选的参数数组(或类数组对象)作为参数来调用一个函数。

Function.prototype.bind()

创建一个新的函数,在调用时,其this 关键字被设置为提供的值,可选地在调用新函数时在提供的参数之前加上一系列给定的参数。

Function.prototype.call()

使用给定的this 值和可选参数调用一个函数。

Function.prototype.toString()

返回表示函数源代码的字符串。重写了Object.prototype.toString 方法。

Function.prototype[Symbol.hasInstance]()

指定确定构造函数是否将对象识别为其实例的默认过程。由instanceof 运算符调用。

示例

Function 构造函数与函数声明之间的不同

Function 构造函数创建的函数不会创建当前环境的闭包,它们总是被创建于全局环境,因此在运行时它们只能访问全局变量和自己的局部变量,不能访问它们被Function 构造函数创建时所在的作用域的变量。这一点与使用eval() 执行创建函数的代码不同。

js
// 使用 `var` 创建一个全局属性var x = 10;function createFunction1() {  const x = 20;  return new Function("return x;"); // 这个 `x` 指的是全局 `x`}function createFunction2() {  const x = 20;  function f() {    return x; // 这个 `x` 指的是上面的局部 `x`  }  return f;}const f1 = createFunction1();console.log(f1()); // 10const f2 = createFunction2();console.log(f2()); // 20

虽然这段代码可以在浏览器中正常运行,但在 Node.js 中f1() 会产生一个“找不到变量x”的ReferenceError。这是因为在 Node 中顶级作用域不是全局作用域,而x 其实是在当前模块的作用域之中。

规范

Specification
ECMAScript® 2026 Language Specification
# sec-function-objects

浏览器兼容性

参见

Help improve MDN

Learn how to contribute.

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp