The parameters of functions magically match up in Angularjs?

I'm new to angualarjs and just start to build a page using angularjs 1.5 component. I'm trying to understand the following example from pluralsight. Does angularjs extended javascript with partial application/currying and others?

Now, your movie-rating component will receive a setRating function and assign it to its controller. When you execute $ctrl.setRating() inside of the movieRating controller, Angular is going to expect you to pass it an object like

{ movie: 0, value: 0 }

it will then map these values to the parameter order specified in the string passed to set-rating; in other words, Angular will take model.setRating(movie, value) and work out that it actually needs to pass in the value of the movie key from the passed object to the first parameter and the value object to the second parameter.

So, when you click your span inside of movie-rating, it will call setRating({ value: $index }). It will leave movieundefined, so the parent function, movieList.setRating will receive the parameters (undefined, $index).

Note that all of this expression binding behaviour (where the names of movie and value inside of the set-rating expression are preserved) only applies to the template. This is why in JavaScript code you see that Angular does not fall over.

To basically tldr this, when you use value names in a function binding in the template, Angular will unpack an object passed to an invocation of the function and match up the parameters via name. It will only do this for & bindings, and only unpack js objects to & bindings (which have to be defined in HTML). It will not unpack JS objects to regular JS functions (which makes sense - the HTML bindings won't be mangled, but JS variable names will be mangled at runtime; this is why you need to use $inject or array syntax for dependency injection in Angular)

let me know if I can explain this any clearer

Email codedump link for The parameters of functions magically match up in Angularjs?