Angular JS

AngularJS was a JavaScript-based open-source front-end web framework for developing single page applications. It was mainly maintained by Google and a community of individuals and corporations. Its aim was to simplify both development and testing of such appliactions by providing a framework for client-side model–view–controller (MVC) architecture, along with components commonly used in web applications and progressive web applications.

As of January 1, 2022, Google no longer updates AngularJS to fix security, browser compatibility, or jQuery issues. The Angular team recommends upgrading to Angular (v2+) as the best path forward, but they also provided some other options.

Philosophy
AngularJS is built around the belief that declarative programming should be used for building user interfaces and connecting software components, while imperative programming is better suited to defining an application's business logic. The framework adapts and extends traditional HTML to present dynamic content through two-way data-binding that allows for the automatic synchronization of models and views. As a result, AngularJS de-emphasizes DOM manipulation with the goal of improving testability and performance.

AngularJS's design goals include:
 * Decouple DOM manipulation from application logic. This improves the testability of the code.
 * Regard application testing as equal in importance to application writing. Testing difficulty is dramatically affected by the way the code is structured.
 * Decouple the client side of an application from the server side. This allows development work to progress in parallel, and allows for reuse of both sides.
 * Provide structure for the journey of building an application: from designing the UI, through writing the business logic, to testing.

Angular implements the MVC pattern to separate presentation, data, and logic components. Using dependency injection, Angular brings traditionally server-side services, such as view-dependent controllers, to client-side web applications. Consequently, much of the burden on the server can be reduced.

Scope
Angular uses the term "scope" to mean something different than what it usually means in computer science.

Scope in computer science describes when in the program a particular binding is in effect. The ECMA-262 specification defines scope as a lexical environment that defines the environment in which a Function object is executed in a similar way as scope is defined in lambda calculus

In Angular, "scope" is a certain kind of object that itself can be in scope or out of scope in any given part of the program, following the usual rules of variable scope in JavaScript like any other object. When the term "scope" is used below, it means the Angular scope object and not the variable scope.