Angular JS loads and compiles templates, including directives, expressions, and data binding. It uses controllers to expose model data to templates through scopes, allowing templates to display data and controllers to update it. Scopes mediate between controllers and templates, providing access to shared data and handling data binding and expression evaluation. For example, a controller can define a scope property that is displayed in a template using double curly braces.