Typing is the main factor in determining whether a language is dynamic.
In programming, a type system defines how a language classifies similar types of values and expressions, how it can manipulate them, and how they interact with one another:
Statically typed languages:
Programs explicitly declare—but need not define—variables before they are used.
Strongly typed languages:
Variables are bound to specific data types.
Strong typing enforces rules as to what programs can do with various elements by detecting and correcting type-related errors at compile time.
Dynamically typed languages:
Programs must define variables—but not explicitly declare them—before they are used.
Weakly typed languages:
Variables are not bound to a specific data type, which again provides more flexibility but less structure.
Weak typing corrects the type-related errors for which there are no exceptions at runtime.
Static and dynamic languages have the following comments about typing:
Static languages
are generally, but not always, strongly and statically typed.
And some static languages, such as C and C++, are weakly typed.
Dynamic languages
are usually, but not always, weakly and dynamically typed.
Some dynamic languages, such as Lisp, are strongly typed.
Because applications written with dynamic languages don't have to explicitly declare variables and some other structural items before they are used, the programs can introduce variable types, module names, classes, and functions on the fly, thereby providing programmers with flexibility.