Mỗi hàm JavaScript thực sự là một đối tượng Tạo một đối tượng 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 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.Function
. Điều này có thể được nhìn thấy với mã [function [] {}].constructor === Function
, trả về đúng.Người xây dựng
Function[]
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.Thuộc tính thể hiện
Function.prototype.arguments
DEVENATEDNON-STANDARDDeprecated Non-standardFunction
. Sử dụng đối tượng Function
0 [có sẵn trong hàm] thay thế.Function
1 không chuẩnNon-standard Deprecated
Function
2 không chuẩnNon-standard OptionalTên hiển thị của hàm.
Function
3Chỉ định số lượng đối số dự kiến của hàm.
Function
4Tên của hàm.
Function
5Được sử dụng khi hàm được sử dụng làm hàm tạo với toán tử Function
6. Nó sẽ trở thành nguyên mẫu của đối tượng mới.
Phương pháp thể hiện
Function
7
Gọi một hàm có giá trị Function
8 đã 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].
Function
9Tạo một hàm mới, khi được gọi, có từ khóa Function
8 đượ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 === Function
1Gọi một hàm với giá trị Function
8 đã cho và các đối số tùy chọn.
[function [] {}].constructor === Function
3 Trả về một chuỗi đại diện cho mã nguồn của hàm. Ghi đè phương thức [function [] {}].constructor === Function
4.
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 === Function
8 sẽ tạo ra [function [] {}].constructor === Function
9 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