--- title: Function slug: Web/JavaScript/Reference/Global_Objects/Function tags: - Constructor - Function - JavaScript - TopicStub - hàm translation_of: Web/JavaScript/Reference/Global_Objects/Function ---
Hàm Function
tạo mới một đối tượng Function
. Gọi hàm tạo trực tiếp có thể tạo các hàm một cách linh hoạt, nhưng gặp phải các vấn đề về bảo mật và hiệu suất tương tự như {{jsxref("eval")}}.
Mỗi một JavaScript function thực sự là một đối tượng Function
.
new Function ([arg1[, arg2[, ...argN]],] functionBody)
arg1, arg2, ... argN
x
", "theValue
" hoặc "a,b
".functionBody
Đối tượng Function
được tạo ra thông qua hàm Function
được chuyển đổi khi hàm được tạo ra. Điều này kém hiệu quả hơn so với việc khai báo một hàm với biểu thức hàm hoặc câu lệnh hàm và gọi nó trong mã của bạn, bởi vì các hàm đó được phân tích cú pháp với phần còn lại của mã.
Tất cả các tham số truyền cho hàm được coi là tên định danh của các tham số trong hàm, thứ mà sẽ được tạo, theo thứ tự chúng được truyền.
Gọi Function
như là một hàm (không sử dụng toán tử new
) có tác dụng tương tự như gọi nó là một hàm thông thường.
Function
Một đối tượng Function
toàn cục không có phương thức hoặc thuộc tính của riêng nó. Tuy nhiên, vì bản thân nó là một hàm, nó thừa hưởng một số phương thức và thuộc tính thông qua {{jsxref("Function.prototype")}}.
Function
prototypeFunction
Các thể hiện của Function
kế thừa các phương thức và thuộc tính từ {{jsxref("Function.prototype")}}. Cũng như tất cả các hàm khác, bạn có thể thay đổi prototype của hàm tạo để thực hiện thay đổi cho tất cả các thể hiện của Function
.
Function
Đoạn mã sau tạo ra một đối tượng Function
có hai tham số.
// Ví dụ này có thể chạy trực tiếp trên JavaScript Console // Tạo một hàm gồm hai tham số và trả về tổng của những tham số đó var adder = new Function('a', 'b', 'return a + b'); // Gọi hàm adder(2, 6); // > 8
Những tham số "a
" và "b
" là các tên tham số chính thức được sử dụng trong thân hàm, "return a + b
".
Các hàm được tạo ra cùng với Function
constructor không tạo ra sự khép kín với bối cảnh sáng tạo của chúng; chúng luôn luôn được tạo ra trong phạm vi toàn cục. Khi gọi, chúng sẽ chỉ có thể truy cập đên các biến cục bộ và biến toàn cục của chúng, chứ không phải các biến từ phạm vi mà Function
constructor được tạo. Điều này khác với việc sử dụng {{jsxref("eval")}} với mã cho biểu thức hàm.
var x = 10; function createFunction1() { var x = 20; return new Function('return x;'); // |x| trỏ tới |x| toàn cục } function createFunction2() { var x = 20; function f() { return x; // |x| trỏ tới |x| cục bộ ngay bên trên } return f; } var f1 = createFunction1(); console.log(f1()); // 10 var f2 = createFunction2(); console.log(f2()); // 20
Thông số kỹ thuật | Trạng thái | Chú thích |
---|---|---|
{{SpecName('ES1')}} | {{Spec2('ES1')}} | Định nghĩa ban đầu. Được triển khai trong JavaScript 1.0. |
{{SpecName('ES5.1', '#sec-15.3', 'Function')}} | {{Spec2('ES5.1')}} | |
{{SpecName('ES6', '#sec-function-objects', 'Function')}} | {{Spec2('ES6')}} | |
{{SpecName('ESDraft', '#sec-function-objects', 'Function')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.builtins.Function")}}