The fact that JavaScript is not a strongly typed language allows developers a lot of freedom, but that freedom can be dangerous if you go too far with it.

Specifically, it is syntactically acceptable to invoke any expression as though its value were a function. But a TypeError may be raised if you do.

Noncompliant Code Example

foo = 1;
foo();   // Noncompliant; TypeError

foo = undefined;
foo();  // Noncompliant; TypeError