5 ms·
Show HN: A Javascript quiz that explores how javascript scopes its variables
- tantalor 14y agoSince your quiz applies equally to any JavaScript engine, why not replace "window" with "this"? See https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/this https://developer.mozilla.org/en-US/docs/JavaScript/Referenc... > In the global context (outside of any function), this refers to the global object, whether in strict mode or not.
- theuiguru 14y agoExcellent quiz to test your knowledge on global and local variables.
- droppedonjapan_ 14y agoYou might want to consider including something about how passing objects between functions can be by reference or value for object oriented Javascript programming.
- suyash 14y agoJavaScript only supports pass by value, @ author: Nice quiz, I failed the last one, it would be nice to add more quizes and test users knowledge of function scoping, just like the commenter said, since functions can be passed around like objects, function scoping is another tricky one to master for beginners.
- japrescott 14y agonot true. boolean, strings, numbers (int, float) are passed by value, while Objects, Arrays and Functions are passed by reference!
- Vishnudas 14y agoNice Quiz. I just attempted with all right :)
- deleted 14y ago[deleted]
- japrescott 14y agoveryvery superb quiz! I like the way you mix questions with a tutorial, not just "HA, you suck, wrong", but really give detailed explanations, even when the correct answer is given. Maybe you can add some questions with strange return values or some "what happens if you modify the passed-in object within a function?"; function(){ var fn2=function(){} if (fn2()){ alert("nobody ever calls me"); } else{ alert("stop calling me!"); } } (no return value is a falsy value) var data={a:"cow"}; function update(obj){ obj.a="fish"; } update(data); alert(data.a); //"fish" vs. var data="cow"; function update(str){ str="fish"; } update(data); alert(data); //"cow" keep up the great work!
- pankajparashar 14y agoGood & Informative quiz....Especially the tutorials section.
- dschoon 14y agoYeah, I agree with the other comments -- the greatest JS scoping gotcha involves unbound methods. var o = { a:13, add:function(b){ return this.a + b; } }; o.add(42); // => `55` var add = o.add; add(42); // => `NaN`, because `this.a` is (presumably) `undefined` var a = 3; add(42); // => `45`, because `this.a` is resolved to `window.a`, as `window` is the global variable used as the method context when we call an unbound function (which is stupid (`null` would have been a way better choice, Brandon)). This is the sort of thing you learn and just get over to reach the level of javascript mastery. Yeah, some things are silly. But you know what? You only get to write one language to access the dynamic web.
- dschoon 14y agoFor unknown reasons, ARC has truncated my code-comment. It read: // => `45`, because `this.a` is resolved to `window.a`, as `window` is the global variable used as the method context when we call an unbound function (which is stupid (`null` would have been a way better choice, Brandon)).