Mỗi hàm JavaScript thực sự là một đối tượng Function. Điều này có thể được nhìn thấy với mã (function () {}).constructor === Function, trả về đúng. Function() Tạo một đối tượng Function mới. Gọi hàm xây dựng trực tiếp có thể tạo các chức năng một cách linh hoạt nhưng bị các vấn đề về bảo mật và tương tự (nhưng ít quan trọng hơn) đối với eval(). Tuy nhiên, không giống như eval(), hàm tạo Function chỉ tạo các chức năng thực hiện trong phạm vi toàn cầu. Function.prototype.arguments DEVENATEDNON-STANDARDDeprecated Non-standard Một mảng tương ứng với các đối số được truyền đến một hàm. Điều này không được chấp nhận như một tài sản của Function. Sử dụng đối tượng Function0 (có sẵn trong hàm) thay thế. Chỉ định chức năng gọi chức năng hiện đang thực hiện. Thuộc tính này không được dùng và chỉ có chức năng cho một số chức năng không nghiêm ngặt.Người xây dựng
Thuộc tính thể hiện
Tên hiển thị của hàm.
Function3Chỉ định số lượng đối số dự kiến của hàm.
Function4Tên của hàm.
Function5Được sử dụng khi hàm được sử dụng làm hàm tạo với toán tử Function6. Nó sẽ trở thành nguyên mẫu của đối tượng mới.
Phương pháp thể hiện
Function7
Gọi một hàm có giá trị Function8 đã cho và các đối số tùy chọn được cung cấp dưới dạng mảng (hoặc một đối tượng giống như mảng).
Function9Tạo một hàm mới, khi được gọi, có từ khóa Function8 được đặt thành một giá trị được cung cấp, tùy chọn với một chuỗi các đối số nhất định trước bất kỳ được cung cấp nào khi hàm mới được gọi.
(function () {}).constructor === Function1Gọi một hàm với giá trị Function8 đã cho và các đối số tùy chọn.
(function () {}).constructor === Function3Trả về một chuỗi đại diện cho mã nguồn của hàm. Ghi đè phương thức (function () {}).constructor === Function4.
Ví dụ
Sự khác biệt giữa hàm tạo chức năng và khai báo chức năng
Các chức năng được tạo ra với hàm tạo Function không tạo ra các đóng cửa cho bối cảnh sáng tạo của chúng; Chúng luôn được tạo ra trong phạm vi toàn cầu. Khi chạy chúng, chúng sẽ chỉ có thể truy cập các biến cục bộ và các biến toàn cầu của riêng họ, chứ không phải các biến từ phạm vi mà hàm tạo Function được tạo. Điều này khác với việc sử dụng eval() với mã cho biểu thức chức năng.
// 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
Mặc dù mã này hoạt động trong các trình duyệt web, (function () {}).constructor === Function8 sẽ tạo ra (function () {}).constructor === Function9 trong Node.js, vì Function()0 sẽ không được tìm thấy. Điều này là do phạm vi cấp cao nhất trong nút không phải là phạm vi toàn cầu và Function()0 sẽ là cục bộ với mô-đun.
Thông số kỹ thuật
Đặc tả ngôn ngữ Ecmascript # Sec-Function-Enjects # sec-function-objects |
Tính tương thích của trình duyệt web
Bảng BCD chỉ tải trong trình duyệt