Function

Baseline 廣泛可用 *

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

* 此特性的某些部分可能存在不同級別的支援。

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

當函式用作使用 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
// 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

瀏覽器相容性

另見