Refer to the code below:
01 x = 3.14;
02
03 function myFunction() {
04 'use strict';
05 y = x;
06 }
07
08 z = x;
09 myFunction();
Considering the implications of 'use strict' on line 04, which three statements describe the execution of the code?
Comprehensive and Detailed Explanation From Exact Extract JavaScript knowledge:
Behavior of non-strict global code
The script does not begin with a 'use strict' directive at the top level, so the global code (outside any function) runs in non-strict (sloppy) mode.
Line 01: x = 3.14;
In non-strict mode, assigning to an undeclared identifier (no var, let, or const) creates an implicit global variable. So after line 01, x exists and equals 3.14.
Line 08: z = x;
This also runs in non-strict mode. Since x is already defined (from line 01), z is set to 3.14. Therefore, statement B is correct: z is equal to 3.14.
Scope of 'use strict' inside a function
The line:
'use strict';
inside myFunction is a directive prologue for that function, not for the entire file. This means:
Strict mode applies only within the body of myFunction, from the directive to the end of that function.
It does not retroactively affect code before the function or code outside of it.
Therefore:
Statement A is incorrect: 'use strict' is not ''hoisted'' to affect the whole file. It only affects the function body.
Statement C is incorrect: strict mode does not apply from line 04 to the end of the file; it only applies within myFunction, not to global lines like 01, 08, or 09.
Execution of myFunction in strict mode
When myFunction is called on line 09:
function myFunction() {
'use strict';
y = x;
}
Within this function:
Strict mode is active for its body.
In strict mode, assigning to an undeclared variable (like y here) is not allowed and results in a ReferenceError at runtime.
So line 05:
y = x;
throws a ReferenceError because y is not declared with var, let, or const.
Therefore, statement E is correct: line 05 throws an error.
Why statement D is considered correct
Statement D says:
'use strict' has an effect only on line 05.
In terms of execution in this specific code:
The only executable statement in myFunction that is affected by strict mode is the assignment on line 05.
The directive itself on line 04 is not a ''normal'' runtime operation; it is a directive that sets the mode.
There are no other statements inside the function that behave differently under strict mode; only the line that assigns to the undeclared variable shows a strict-mode effect.
So, describing the practical execution behavior of this snippet, strict mode manifests its effect only on line 05, making statement D correct in this context.
Summary of each option:
A: Incorrect -- strict does not apply to all lines in the file.
B: Correct -- z becomes 3.14 in non-strict global code.
C: Incorrect -- strict does not affect code outside the function.
D: Correct -- in this code, the only behavioral effect of strict mode is on line 05.
E: Correct -- line 05 throws a ReferenceError due to assignment to undeclared y under strict mode.
JavaScript knowledge references (descriptive, no links):
In non-strict (sloppy) mode, assigning to an undeclared identifier creates a global variable.
'use strict' inside a function body enables strict mode for that function only.
In strict mode, assigning to an undeclared variable results in a ReferenceError.
Directive prologues ('use strict') affect only their containing function or script, not other scopes.
==================================================
Currently there are no comments in this discussion, be the first to comment!