Một chức năng được định nghĩa như thế này có thể truy cập được từ bất kỳ đâu trong ngữ cảnh của nó bằng tên của nó. Nhưng đôi khi có thể hữu ích khi xử lý các tham chiếu hàm như tham chiếu đối tượng. Ví dụ: bạn có thể gán một đối tượng cho một biến dựa trên một số tập hợp điều kiện và sau đó truy xuất một thuộc tính từ một hoặc đối tượng khác
var name = 'Cameron';
var spouse;
if [ name === 'Taylor' ] spouse = { name: 'Jordan' };
else if [ name === 'Cameron' ] spouse = { name: 'Casey' };
var spouseName = spouse.name;
Trong JavaScript, bạn có thể làm điều tương tự với các hàm
// Example 1
var hashAlgorithm = 'sha1';
var hash;
if [ hashAlgorithm === 'sha1' ] hash = function[value]{ /*...*/ };
else if [ hashAlgorithm === 'md5' ] hash = function[value]{ /*...*/ };
hash['Fred'];
Trong ví dụ trên, hash
là một biến bình thường. Nó được gán một tham chiếu đến một hàm, sau đó hàm mà nó tham chiếu có thể được gọi bằng cách sử dụng dấu ngoặc đơn, giống như một khai báo hàm thông thường
Ví dụ trên tham khảo các chức năng ẩn danh. các hàm không có tên riêng. Bạn cũng có thể sử dụng các biến để chỉ các hàm được đặt tên. Ví dụ trên có thể được viết lại như vậy
// Example 2
var hashAlgorithm = 'sha1';
var hash;
if [ hashAlgorithm === 'sha1' ] hash = sha1Hash;
else if [ hashAlgorithm === 'md5' ] hash = md5Hash;
hash['Fred'];
function md5Hash[value]{
// ...
}
function sha1Hash[value]{
// ...
}
Hoặc, bạn có thể gán tham chiếu hàm từ thuộc tính đối tượng
// Example 3
var hashAlgorithms = {
sha1: function[value] { /**/ },
md5: function[value] { /**/ }
};
var hashAlgorithm = 'sha1';
var hash;
if [ hashAlgorithm === 'sha1' ] hash = hashAlgorithms.sha1;
else if [ hashAlgorithm === 'md5' ] hash = hashAlgorithms.md5;
hash['Fred'];
Bạn có thể gán tham chiếu cho một hàm do biến này nắm giữ cho biến khác bằng cách bỏ qua dấu ngoặc đơn. Điều này có thể dẫn đến một sai lầm dễ mắc phải. cố gắng gán giá trị trả về của một hàm cho một biến khác, nhưng vô tình gán tham chiếu cho hàm
// Example 4
var a = getValue;
var b = a; // b is now a reference to getValue.
var c = b[]; // b is invoked, so c now holds the value returned by getValue [41]
function getValue[]{
return 41;
}
Một tham chiếu đến một hàm giống như bất kỳ giá trị nào khác. Như bạn đã thấy, một tham chiếu có thể được gán cho một biến và giá trị tham chiếu của biến đó sau đó có thể được gán cho các biến khác. Bạn có thể chuyển tham chiếu đến hàm giống như bất kỳ giá trị nào khác, bao gồm chuyển tham chiếu đến hàm dưới dạng giá trị trả về của hàm khác. Ví dụ
// Example 5
// getHashingFunction returns a function, which is assigned
// to hash for later use:
var hash = getHashingFunction[ 'sha1' ];
// ...
hash['Fred'];
// return the function corresponding to the given algorithmName
function getHashingFunction[ algorithmName ]{
// return a reference to an anonymous function
if [algorithmName === 'sha1'] return function[value]{ /**/ };
// return a reference to a declared function
else if [algorithmName === 'md5'] return md5;
}
function md5Hash[value]{
// ...
}
Bạn không cần gán một tham chiếu hàm cho một biến để gọi nó. Ví dụ này, xây dựng từ ví dụ 5, sẽ gọi getHashingFunction và sau đó ngay lập tức gọi hàm được trả về và chuyển giá trị trả về của nó cho hashValue
// Example 6
var hashedValue = getHashingFunction[ 'sha1' ][ 'Fred' ];
Lưu ý khi cẩu hàng
Hãy nhớ rằng, không giống như khai báo hàm thông thường, các biến tham chiếu đến hàm không được "hoisted". Trong ví dụ 2, các hàm
var name = 'Cameron';
var spouse;
if [ name === 'Taylor' ] spouse = { name: 'Jordan' };
else if [ name === 'Cameron' ] spouse = { name: 'Casey' };
var spouseName = spouse.name;
0 và var name = 'Cameron';
var spouse;
if [ name === 'Taylor' ] spouse = { name: 'Jordan' };
else if [ name === 'Cameron' ] spouse = { name: 'Casey' };
var spouseName = spouse.name;
1 được xác định ở cuối tập lệnh, nhưng có sẵn ở mọi nơi ngay lập tức. Bất kể bạn định nghĩa một hàm ở đâu, trình thông dịch sẽ "nâng" nó lên đầu phạm vi của nó, làm cho nó khả dụng ngay lập tức. Đây không phải là trường hợp đối với các định nghĩa biến, vì vậy mã như sau sẽ bị hỏngTrong bài viết này, chúng ta sẽ xem cách gán hàm cho một biến trong Python. Trong Python, chúng ta có thể gán một hàm cho một biến. Và sử dụng biến đó, chúng ta có thể gọi hàm bao nhiêu lần chúng ta muốn. Qua đó, tăng khả năng sử dụng lại code.
Thực hiện
Chỉ cần gán một hàm cho biến mong muốn nhưng không có [] i. e. chỉ với tên của chức năng. Nếu biến được gán với hàm cùng với dấu ngoặc [], Không có gì sẽ được trả về