建構函式
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 |
瀏覽器相容性
載入中…