Các hàm một phần cho phép lấy một hàm làm đối số và cùng với đó, nó cũng nhận các đối số của các loại khác. Sau đó, nó sử dụng một số đối số được truyền và trả về một hàm sẽ nhận các đối số còn lại. Hàm được trả về khi được gọi sẽ gọi hàm cha với đối số ban đầu và tập hợp riêng của nó
Sau đây là mã cho các hàm từng phần trong JavaScript −
Ví dụ
Bản thử trực tiếp
Document Partial function in JavaScript CLICK HEREClick on the above button to see partial function invocation
đầu ra
Đoạn mã trên sẽ tạo ra đầu ra sau -
Khi nhấp vào nút 'BẤM VÀO ĐÂY' -
Các phần về cơ bản là các hàm trả về các hàm với một số đối số đã được xác định trước và cần một số đối số để hoàn thành. Giả sử bạn có một hàm với một số đối số được đặt, nhưng bạn không muốn đặt đi đặt lại phần lớn các đối số vì bạn cần nó nhiều lần
# my useless function to write something to the dom
function writeSomethingToDom[element, content]{
element.append[content];
}
# use the function repeatedly
writeSomethingToDom[ $["p"], "Hallo" ];
writeSomethingToDom[ $["p"], "Welt" ];
writeSomethingToDom[ $["p"], "Hello" ];
Vì vậy, sẽ tốt hơn nếu xác định đối số "phần tử" và sử dụng hàm chỉ với đối số "nội dung" đã thay đổi. Vì vậy, chúng ta sẽ cần một "một phần" trong đó phần tử được đặt và hàm chỉ chờ một đối số được hoàn thành. Chúng ta sẽ tạo một Partial nơi hàm của chúng ta được trả về với một số đối số đã được đặt
# my useless function to write something to the dom
function writeSomethingToDom[element, content]{
element.append[content];
}
# create a new partial
# retuns our writeSomethingToDom[] function
# but with the "element" argument already set.
var writeToParagraph = createPartial[ writeSomethingToDom, $["p"] ];
# use the function repeatedly
writeToParagraph[ "Hallo" ];
writeToParagraph[ "Welt" ];
writeToParagraph[ "Hello" ];
Đó là một cách tiếp cận chức năng để sử dụng một chức năng nhiều lần, trong đó một tập hợp con của các đối số giống nhau. Bạn có thể sử dụng và thực hiện bao nhiêu đối số tùy thích trong bước đầu tiên và bước thứ hai. Một phần luôn chờ phần còn lại của các đối số được đưa ra. Tất cả những gì bạn cần là một chức năng trợ giúp như thế này
function createPartial[func /*, 0..n args */] {
var args = Array.prototype.slice.call[arguments, 1];
return function[] {
var allArguments = args.concat[Array.prototype.slice.call[arguments]];
return func.apply[this, allArguments];
};
}
cảm ơn chủ đề stackoverflow này
Tôi bắt gặp mô hình này vì tôi thích sử dụng các lời hứa được xâu chuỗi trong "jQuery"/Javascript. Theo ý kiến của tôi thì có thể đọc được, nhưng đôi khi bạn cần chuyển một số đối số và điều đó chỉ có thể thực hiện được nếu bạn sử dụng các hàm ẩn danh xấu xí. Nhìn vào ví dụ này
Trong bài viết này, chúng ta sẽ xem xét cách sử dụng một phần ứng dụng và thành phần của hàm với JavaScript
ứng dụng một phầnỨng dụng một phần là nơi chúng ta chỉ áp dụng một số đối số được mong đợi trong một hàm
Ví dụ: nếu chúng ta có một hàm có 3 tham số
const add = [x, y, z] => x + y + z;
Sau đó, chúng ta có thể tạo một hàm có hàm
const add1 = [y, z] => add[1, y, z];
0 với các đối số được áp dụng một phần bằng cách viếtconst add1 = [y, z] => add[1, y, z];
Sau đó, chúng ta có thể sử dụng nó bằng cách viết
const sum = add1[2, 3];
Và chúng tôi nhận được 6
Để khái quát hóa điều này, chúng ta có thể viết
________số 8Chúng tôi tạo hàm
const add1 = [y, z] => add[1, y, z];
1 của riêng mình bằng cách trả về một hàm có chênh lệch const add1 = [y, z] => add[1, y, z];
2 và const add1 = [y, z] => add[1, y, z];
3 dưới dạng đối số vào hàm const add1 = [y, z] => add[1, y, z];
4Sau đó, chúng ta có thể sử dụng nó bằng cách viết
# my useless function to write something to the dom
function writeSomethingToDom[element, content]{
element.append[content];
}
# use the function repeatedly
writeSomethingToDom[ $["p"], "Hallo" ];
writeSomethingToDom[ $["p"], "Welt" ];
writeSomethingToDom[ $["p"], "Hello" ];
3và
const add1 = [y, z] => add[1, y, z];
5 lại là 6cà ri vs. ứng dụng một phầnCurrying rất tốt bất cứ khi nào chúng ta cần chuyển đổi các hàm nhận nhiều đối số thành nhiều hàm nhận một đối số
Các tình huống mà chúng ta cần chuyển đổi một hàm nhận nhiều đối số thành hàm gọi lại cho
const add1 = [y, z] => add[1, y, z];
6 chỉ nhận một tham số là một ví dụ về điều đóỨng dụng một phần của hàm rất hữu ích cho bất kỳ tình huống nào mà chúng ta cần áp dụng một hoặc các đối số cho một hàm và trả về một hàm có các đối số được áp dụng
Thành phầnThành phần là nơi chúng tôi xâu chuỗi nhiều lệnh gọi hàm để trả về kết quả mà chúng tôi muốn
Chúng ta có nhiều hàm thực hiện một việc và chúng ta kết hợp chúng thành một để có được kết quả như mong muốn
Chẳng hạn, chúng ta có thể soạn các phương thức mảng
const add1 = [y, z] => add[1, y, z];
6 và const add1 = [y, z] => add[1, y, z];
8 bằng cách viết# my useless function to write something to the dom
function writeSomethingToDom[element, content]{
element.append[content];
}
# use the function repeatedly
writeSomethingToDom[ $["p"], "Hallo" ];
writeSomethingToDom[ $["p"], "Welt" ];
writeSomethingToDom[ $["p"], "Hello" ];
8Và
const add1 = [y, z] => add[1, y, z];
9 là const sum = add1[2, 3];
0Chúng tôi gọi
const add1 = [y, z] => add[1, y, z];
8 để trả về một mảng chỉ có các số lẻVà sau đó chúng tôi gọi
const add1 = [y, z] => add[1, y, z];
6 để bình phương mỗi số lẻsoạn hàmChúng ta có thể tổng quát hóa hàm soạn thảo bằng cách viết
# my useless function to write something to the dom
function writeSomethingToDom[element, content]{
element.append[content];
}
# create a new partial
# retuns our writeSomethingToDom[] function
# but with the "element" argument already set.
var writeToParagraph = createPartial[ writeSomethingToDom, $["p"] ];
# use the function repeatedly
writeToParagraph[ "Hallo" ];
writeToParagraph[ "Welt" ];
writeToParagraph[ "Hello" ];
3Hàm của chúng tôi nhận 2 hàm làm tham số và sau đó chúng tôi trả về một hàm gọi lần lượt từng hàm
const sum = add1[2, 3];
3 được gọi trước, sau đó const sum = add1[2, 3];
4 được gọi trên kết quả trả về của const sum = add1[2, 3];
3Sau đó, chúng ta có thể sử dụng nó bằng cách viết
# my useless function to write something to the dom
function writeSomethingToDom[element, content]{
element.append[content];
}
# create a new partial
# retuns our writeSomethingToDom[] function
# but with the "element" argument already set.
var writeToParagraph = createPartial[ writeSomethingToDom, $["p"] ];
# use the function repeatedly
writeToParagraph[ "Hallo" ];
writeToParagraph[ "Welt" ];
writeToParagraph[ "Hello" ];
7Chúng tôi đã gọi
const sum = add1[2, 3];
6 với const sum = add1[2, 3];
7 và const sum = add1[2, 3];
8const sum = add1[2, 3];
8 được gọi đầu tiên với const partial = function[fn, ...partialArgs] {
let args = partialArgs;
return function[...fullArguments] {
return fn[...[...partialArgs, ...fullArguments]];
};
};
0 và sau đó const sum = add1[2, 3];
7 được gọi trên kết quả trả vềThì
const partial = function[fn, ...partialArgs] {
let args = partialArgs;
return function[...fullArguments] {
return fn[...[...partialArgs, ...fullArguments]];
};
};
2 là 10Soạn nhiều chức năngChúng ta có thể tạo một phiên bản chung của hàm
const sum = add1[2, 3];
6 bằng cách sử dụng phương thức mảng const partial = function[fn, ...partialArgs] {
let args = partialArgs;
return function[...fullArguments] {
return fn[...[...partialArgs, ...fullArguments]];
};
};
4Ví dụ, chúng ta có thể viết
function createPartial[func /*, 0..n args */] {
var args = Array.prototype.slice.call[arguments, 1];
return function[] {
var allArguments = args.concat[Array.prototype.slice.call[arguments]];
return func.apply[this, allArguments];
};
}
7Chúng tôi đã tạo một hàm lấy một mảng hàm
const partial = function[fn, ...partialArgs] {
let args = partialArgs;
return function[...fullArguments] {
return fn[...[...partialArgs, ...fullArguments]];
};
};
5 làm tham sốSau đó, chúng ta trả về một hàm nhận một giá trị làm giá trị ban đầu và gọi
const partial = function[fn, ...partialArgs] {
let args = partialArgs;
return function[...fullArguments] {
return fn[...[...partialArgs, ...fullArguments]];
};
};
4 trên đó để gọi từng hàm trong mảng với kết quả trả vềconst partial = function[fn, ...partialArgs] {
let args = partialArgs;
return function[...fullArguments] {
return fn[...[...partialArgs, ...fullArguments]];
};
};
7 là kết quả trả về từ việc gọi các chức năng cho đến nay và const add1 = [y, z] => add[1, y, z];
4 là chức năngVà sau đó chúng ta có thể sử dụng nó bằng cách viết
const add = [x, y, z] => x + y + z;
2Chúng tôi chia chuỗi theo khoảng trắng bằng hàm
const partial = function[fn, ...partialArgs] {
let args = partialArgs;
return function[...fullArguments] {
return fn[...[...partialArgs, ...fullArguments]];
};
};
9Và ta lấy được độ dài của mảng chuỗi đã chia bằng hàm
# my useless function to write something to the dom
function writeSomethingToDom[element, content]{
element.append[content];
}
# use the function repeatedly
writeSomethingToDom[ $["p"], "Hallo" ];
writeSomethingToDom[ $["p"], "Welt" ];
writeSomethingToDom[ $["p"], "Hello" ];
30Và sau đó chúng tôi sử dụng
const sum = add1[2, 3];
6 để kết hợp chúng lại với nhauKhi chúng ta gọi hàm được trả về bằng một chuỗi, chúng ta sẽ nhận được các từ số được phân tách bằng khoảng trắng
Vì vậy,
# my useless function to write something to the dom
function writeSomethingToDom[element, content]{
element.append[content];
}
# use the function repeatedly
writeSomethingToDom[ $["p"], "Hallo" ];
writeSomethingToDom[ $["p"], "Welt" ];
writeSomethingToDom[ $["p"], "Hello" ];
32 là 3Ảnh của Finn Gerkens trên BaptKết luận
Chúng ta có thể áp dụng một phần và soạn các hàm bằng JavaScript
Ứng dụng một phần cho phép chúng ta gọi các hàm với một số đối số được áp dụng
Và thành phần cho phép chúng tôi gọi nhiều chức năng trong một chuỗi
Rất thích bài viết này?