+ 7

"use strict" + arguments[i]

This is paraphrased question from a timed JavaScript Challenge. This one had two topics I haven't seen yet which are "use strict" and the keyword arguments[i]. What is the output? function foo(str) {   arguments[0] = "Hello";   return str; } function bar(str) {   "use strict";   arguments[0] = "Planet";   return str; } console.log(foo("Pizza") + " " + bar("World")); The output is "Hello World" I think this happens because "use strict" will not allow you to reassign arguments[i] because it can cause errors or poses security issues(?). Maybe both? What insights do you have? Thank you!

5th Nov 2018, 5:55 AM
DumbledoresAmy
DumbledoresAmy - avatar
12 Answers
+ 2
Hi DumbledoresAmy, Thanks for tagging me, I just learned this myself right now. Very nice question. Regarding strict mode: Its an ES5 feature, previous JS versions (mostly ES3) were very forgiving (they throw very less errors). strict mode tries to resolve this by enforcing stricter rules and throwing error for many forgiving cases. Regarding this problem : In bar( ), with strict mode "arguments" behaves more like a keyword and only stores the original value passed to it, when the function was called. Trying to modify "arguments" in strict mode will have no effect on it, so doing arguments[0] = "Planet" ; is useless, as "arguments" cant be modified in strict mode. https://developer.mozilla.org/en-US/docs/Web/Javascript/Reference/Strict_mode#Making_eval_and_arguments_simpler
6th Nov 2018, 3:50 AM
Morpheus
Morpheus - avatar
+ 5
DumbledoresAmy I couldnt say much on this as I have yet to do Professional development specially to target old browsers. But since I always use ES6+ features and follow good practices, I never used strict mode. Many browsers by default use strict mode now, so I see no reasons to use strict mode. strict mode is a feature to help Developer, so using it during development will be definitely helpful and not much harm. I ll look into this more
6th Nov 2018, 4:06 AM
Morpheus
Morpheus - avatar
+ 2
jay I tried the same code commenting out "use strict" and then arguments reassigns and works the way I would have guessed. When I Googled "use strict" MDN says use strict won't allow reassignment of arguments. I'm curious about the why. Does reassignment lead to errors or security issues? Also, I have never used "use strict" or "arguments[i]" before this challenge question so these are both new topics for me.
6th Nov 2018, 1:43 AM
DumbledoresAmy
DumbledoresAmy - avatar
+ 1
Use strict does alows reassign there is a error in your code that's why its not reassigning
5th Nov 2018, 1:21 PM
Adarsh.n. Bidari
Adarsh.n. Bidari - avatar
+ 1
Morpheus What can you tell me about "use strict"?
5th Nov 2018, 11:05 PM
DumbledoresAmy
DumbledoresAmy - avatar
+ 1
Could be that strict is preventing that. Did u try to run the code in browser or node. Check the console, it would interesting to see
6th Nov 2018, 12:36 AM
jay
+ 1
This is interesting. Does "use strict" come up often in professional JS development? Thanks!
6th Nov 2018, 3:54 AM
DumbledoresAmy
DumbledoresAmy - avatar
0
Tyler Schum I hope your around 😎
5th Nov 2018, 4:09 PM
DumbledoresAmy
DumbledoresAmy - avatar
0
Joel Obot Welcome! I created a "Introduce yourself" post and tagged you if you feel like connecting that way. Good luck with all your coding adventures!
7th Nov 2018, 7:39 AM
DumbledoresAmy
DumbledoresAmy - avatar
- 1
Am kinda new here....
6th Nov 2018, 10:40 PM
Joel Obot
Joel Obot - avatar
- 2
hello
6th Nov 2018, 10:40 PM
Joel Obot
Joel Obot - avatar