构造函数
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-
当函数用作使用
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() 处理函数表达式的代码不同。
// Create a global property with `var`
var x = 10;
function createFunction1() {
const x = 20;
return new Function("return x;"); // this `x` refers to global `x`
}
function createFunction2() {
const x = 20;
function f() {
return x; // this `x` refers to the local `x` above
}
return f;
}
const f1 = createFunction1();
console.log(f1()); // 10
const f2 = createFunction2();
console.log(f2()); // 20
虽然此代码在 Web 浏览器中有效,但在 Node.js 中,f1() 会产生 ReferenceError,因为找不到 x。这是因为 Node.js 中的顶层作用域不是全局作用域,x 将是模块的局部变量。
规范
| 规范 |
|---|
| ECMAScript® 2026 语言规范 # sec-function-objects |
浏览器兼容性
加载中…