Deal of The Day! Hurry Up, Grab the Special Discount - Save 25% - Ends In 00:00:00 Coupon code: SAVE25
Welcome to Pass4Success

- Free Preparation Discussions

Salesforce JS-Dev-101 Exam - Topic 4 Question 7 Discussion

Actual exam question for Salesforce's JS-Dev-101 exam
Question #: 7
Topic #: 4
[All JS-Dev-101 Questions]

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?

Show Suggested Answer Hide Answer
Suggested Answer: B, D, E

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.

==================================================


Contribute your Thoughts:

0/2000 characters

Currently there are no comments in this discussion, be the first to comment!


Save Cancel