Mỗi hàm đều có một danh sách các tham số có thể là danh sách rỗng hay chứa rất nhiều tham số. Với những hàm chứa nhiều tham số trong danh sách tham số thì việc gọi hàm và chuyển các đối số cho nó sẽ gây khó khăn, khó đọc, và cũng khó bảo trì. Trong JavaScript hỗ trợ kĩ thuật Currying cho phép tách danh sách đối số (rất dài) thành các danh sách ngắn hơn cho phép dễ đọc và dễ bảo trì code trong tương lai. Lưu ý thứ tự các tham số và các đối số tương ứng là rất quan trọng.

Xét ví dụ tạo một hàm hiển thị thông điệp xin chào đến một người nào đó như sau:


var greet = function (greeting, name) {

alert (greeting + "," + name);

};

greet("Hello",  "Minh"); // Hello,Minh

Thực thi đoạn mã trên.

hàm trên có 2 tham số là greetingname. Áp dụng kĩ thuật Currying để tách hai tham số này như sau:


var greetCurried = function(greeting) {

return function(name) {

alert (greeting + ", " + name);

};

};

Sử dụng hàm greetCurried như sau:


var greetMessage = greetCurried("Hello");

greetMessage("Minh"); //"Hello,Minh"

hay cũng có thể viết như sau:


greetCurried("Hello")("Minh");

Thực thi đoạn mã trên.

Giả sử hàm greet có 3 tham số như sau:


var greet = function (greeting, separator, name) {

alert (greeting + separator + name);

};

greet("Hello", "…", "Minh"); // Hello…Minh

Thực thi đoạn mã trên.

Áp dụng kĩ thuật Currying tách 3 tham số:


var greetCurried = function(greeting) {

return function(separator) {

return function(name) {

alert (greeting + separator + name);

};

};

};

var greetMessage = greetCurried("Hello")("...");

greetMessage ("Minh"); //Hello...Minh

Thực thi đoạn mã trên.

Cách áp dụng Currying như trên, nếu danh sách tham số dài, sẽ rất nhiều hàm trả về lồng nhau, gây phức tạp và khó đọc. Có thể khắc phục vấn đề này bằng cách tận dụng đối tượng Array và phương thức slice concat của nó. Hàm curryIt lấy danh sách tham số và dùng chúng để trả về một phiên bản Currying của hàm gốc:


var curryIt = function(uncurried) {

var parameters = Array.prototype.slice.call(arguments, 1);

return function() {

return uncurried.apply(this, parameters.concat(

Array.prototype.slice.call(arguments, 0)

));

};

};

Áp dụng hàm curryIt cho kĩ thuật Currying như sau:


var greeter = function (greeting, separator, name) {

alert (greeting + separator + name);

};

var greetMessage = curryIt(greeter, "Hello", ", ");

greetMessage("Minh"); //Hello, Minh

Thực thi đoạn mã trên.

< Hàm (functions)