HTML and CSS Reference
In-Depth Information
When you run this code and click
Div2
, the
globalVar
variable is in scope, the
localVar
variable is in scope, but the
insideDiv1Click
variable isn't in scope. That variable lives only
within the
Div1 onclick
handler, so it's in scope only while that function runs. This example
raises an undefined exception when it tries to access the
insideDiv1Click
variable.
As a final example, update the code for
Div3
and other functions as follows:
document.getElementById("Div3").onclick = function () {
var insideDiv3 = "Div3";
AFunction();
BFunctionWithParam(insideDiv3);
};
function AFunction() {
var x;
alert(insideDiv3);
}
function BFunctionWithParam(p) {
alert(p);
alert(localVar);
}
In this code, the variable
insideDiv3
is local to the
onclick
event handler for
Div3
.
The
onclick
event handler has access to the
globalVar
and
localVar
variables just like
the other event handlers did. The event handler for
Div3
also calls the
AFunction
and
BFunctionWithParam
methods. The
AFunction
method attempts to access the
insideDiv3
variable. Unfortunately, that variable lives only within the scope of the
Div3
onclick
handler.
The functions called from the
Div3
click event function don't inherit or have access to the
local variables of the
Div3
method. To access the local variables declared in the
Div3
event
handler from another function, you need to pass them as parameters to those functions.
You can also see an illustration of passing a local variable as a parameter to another
function in the code. After the call to the
AFunction
method, the event handler calls the
BFunctionWithParam
method. This function expects a single parameter named
p
. The
onclick
event handler passes the value of the
insideDiv3
variable to the method. Now, the
p
variable is
a local variable to the
BFunctionWithParam
method, so it can show the value of the
insideDiv3
variable. This is the only way to make a local variable from one function accessible to another
function—by passing a parameter.
Next, the
BFunctionWithParam
method attempts to access the
localVar
variable. It assumes
it would have access, but it doesn't for the same reason the
AFunction
method doesn't have
access to the
insideDiv3
variable. The
localVar
variable is accessible only to code within the
onload
event handler in which it's declared. For functions outside that scope to have access to
it, you need to pass it as a parameter. One more thing to consider with respect to the lifetime
and scope of variables is
hierarchy
.
If you plan to use the values of
globalVar
or
localVar
variables in the
onclick
event han-
dlers for the various div elements, you must not declare any variables at the local level with
the same name. Locally scoped variables override higher-level scoped variables of the same
Search WWH ::
Custom Search