49 lines
1.0 KiB
Plaintext
49 lines
1.0 KiB
Plaintext
Variables declared with ``++var++`` have the special property that regardless of where they're declared in a function they "float" to the top of the function and are available for use even before they're declared. That makes scoping confusing, especially for new coders.
|
|
|
|
To keep confusion to a minimum, ``++var++`` declarations should happen before they are used for the first time.
|
|
|
|
== Noncompliant Code Example
|
|
|
|
[source,javascript]
|
|
----
|
|
var x = 1;
|
|
|
|
function fun(){
|
|
alert(x); // Noncompliant as x is declared later in the same scope
|
|
if(something) {
|
|
var x = 42; // Declaration in function scope (not block scope!) shadows global variable
|
|
}
|
|
}
|
|
|
|
fun(); // Unexpectedly alerts "undefined" instead of "1"
|
|
----
|
|
|
|
|
|
== Compliant Solution
|
|
|
|
[source,javascript]
|
|
----
|
|
var x = 1;
|
|
|
|
function fun() {
|
|
print(x);
|
|
if (something) {
|
|
x = 42;
|
|
}
|
|
}
|
|
|
|
fun(); // Print "1"
|
|
----
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
include::message.adoc[]
|
|
|
|
include::highlighting.adoc[]
|
|
|
|
endif::env-github,rspecator-view[]
|