Przede wszystkim przyjrzeć wykorzystaniem tej konstrukcji:
mod(3)(9);
Można podzielić go na dwa etapy:
var fn = mod(3);
fn(9);
Stąd jest to oczywiste, że mod(3)
sam musi zwrócić nowa funkcja, aby później można było wywołać ją ponownie. Ta nowa funkcja musi zachować wartość przekazaną przy pierwszym wywołaniu. Jest to kluczowa część: należy zapisać tę wartość w zamknięciu (dobrze jest zapisany automatycznie ze względu na charakter zamknięć):
function mod(x) {
return function(y) {
return y % x;
};
}
Nadchodzi dobrą ilustracją pojęcia „zamknięcia”. Jeśli ktoś cię pyta (na przykład w wywiadzie), możesz powiedzieć: zamknięcie to funkcja z zakresem, w którym została oryginalnie utworzona. Tak więc w funkcji powyżej, nowa wewnętrzna funkcja zawsze ma wewnętrzny dostęp do zewnętrznego parametru funkcji x
.
zwróci funkcja. Sprawdź samouczki dotyczące funkcji wyższego rzędu i curry. Myślę, że masz na myśli 'mod (3) (9)' – elclanrs
'mod ((3) (9)) --- --- nie jest poprawnym składniowo JS. Tak więc nie można napisać funkcji, aby takie wywołanie zwróciło '0' – zerkms
wydaje się być dość głupie pytanie wywiadowcze –