Chức năng gọi được gán cho biến javascript

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ỏng

Trong 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ề

Có thể gán một hàm cho một biến trong JavaScript không?

Bạn có thể làm việc với các hàm như thể chúng là các đối tượng. Ví dụ: bạn có thể gán hàm cho các biến , cho các phần tử mảng và cho các đối tượng khác. Chúng cũng có thể được truyền xung quanh dưới dạng đối số cho các hàm khác hoặc được trả về từ các hàm đó. Sự khác biệt duy nhất với các đối tượng là các chức năng có thể được gọi.

Điều gì xảy ra khi một hàm được gán cho một biến trong JavaScript?

Các biến được xác định bên trong một hàm không thể được truy cập từ bất kỳ đâu bên ngoài hàm , bởi vì biến chỉ được xác định trong phạm vi của hàm. Tuy nhiên, một hàm có thể truy cập tất cả các biến và hàm được xác định bên trong phạm vi mà nó được xác định.

Tôi có thể gán một chức năng cho một biến không?

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 tái sử dụng code. 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.

Chúng ta có thể gọi hàm là tham số trong JavaScript không?

Các tham số, trong lời gọi hàm, là đối số của hàm . Đối số JavaScript được truyền theo giá trị. Hàm chỉ biết các giá trị, không biết vị trí của đối số. Nếu một hàm thay đổi giá trị của đối số, thì nó không thay đổi giá trị ban đầu của tham số.