<p>Test for watched expression</p>
<p>To begin test, open DevTools, go the Scripts Panel
and then click this link: <a href="javascript:runTest()">[begin test]</a>.
<p>Perform the following steps, and note the expected results:
<ol>
<li><p>After clicking the link above, you should now be paused in the body of
the test method, thanks to the <code>debugger</code> statement.
<li><p>Add the following expressions to the "Watch Expressions" section of the
Scripts panel sidebar pane: "<code>this</code>", "<code>a</code>",
"<code>b</code>", "<code>c</code>" and "<code>d</code>". Do <b>NOT</b> enter the quotes.
<li><p>The values of the expressions as shown in the window should be
<code>Object</code> for <code>this</code>, <code>undefined</code> for
the <code>a</code>, <code>b</code>, and <code>c</code> variables, and a
value of <code>ReferenceError: d is not defined</code>
for the <code>d</code> variable.
<li><p>Note that the value for <code>d</code> should not change for the life of
the test, as the variable <code>d</code> is never introduced in the program.
<li><p>Step through the code, and you'll see the values of <code>a</code>,
<code>b</code>, and <code>c</code> change, as the variables are assigned.
Also note that as the scope changes due to the function invocation, values
will be changed to refer to their current scope. The <code>this</code>
expression will change when the method is invoked on the object constructed by
the test.
<li><p>Click different stack frames in the Call Stack section to ensure the
expressions change value appropriately as the current stack frame changes.
</ol>
<script>
function runTest() {
// a nested function
function subFunction() {
debugger;
var a = "a in subFunction()";
subSubFunction();
// another nested function
function subSubFunction() {
debugger;
var b = "b in subSubFunction()";
}
}
// a class
function aClass() {
this.x = "xxx";
this.y = "yyy";
}
aClass.prototype.aMethod = function() {
debugger;
var c = "c in aMethod()";
}
// main logic
debugger;
var a = "a in runTest()";
var b = "b in runTest()";
var c = "c in runTest()";
subFunction();
var object = new aClass();
object.aMethod();
}
</script>