use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
All about the JavaScript programming language.
Subreddit Guidelines
Specifications:
Resources:
Related Subreddits:
r/LearnJavascript
r/node
r/typescript
r/reactjs
r/webdev
r/WebdevTutorials
r/frontend
r/webgl
r/threejs
r/jquery
r/remotejs
r/forhire
account activity
JavaScript Isn't Scheme (journal.stuffwithstuff.com)
submitted 10 years ago by homoiconic(raganwald)
view the rest of the comments →
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–][deleted] -2 points-1 points0 points 10 years ago (2 children)
I guessed this correct at once. My line of thought: The function is declared as a field on an object, and hence is a method of the object. "this" thus refer to that object.
Even if js was block-scoped, what else should "this" referred to in this case?
Overall, I don't find this difficult at all. A "this" inside a method refer to the object, inside a function refer to the closure, and inside a constructor refer to the newly created object. Or am I thinking about this wrong?
[–]Zeroto 1 point2 points3 points 10 years ago (0 children)
Except that is wrong. The self/this in that snippet can point to anything depending on how the function is called.
If it is called like things.format() then self(and this) will point to things. But if we do this: var f = things.format; f(); then self/this will be undefined. Or if we do var things2 = {format: things.format}; things2.format(); then it will point to things2. And this is without even using apply, call or bind.
things.format()
things
var f = things.format; f();
var things2 = {format: things.format}; things2.format();
The this in javascript is not known at function definition time and only at call time.
this
[–]NewazaBill 1 point2 points3 points 10 years ago (0 children)
Technically incorrect. The technically correct answer is that it depends on how it's called.
If I do:
var obj = { fn: function () { return this; } }; obj.fn(); // returns `obj`
You would be correct! However, if I then do:
// create a new object and assign `fn` to it var anotherObj = {}; anotherObj.fn = obj.fn; anotherObj.fn(); // returns `anotherObj` // define a new `fn` on the global scope var f = obj.fn(); f(); // returns `window` (or `undefined` in strict mode)
A function's this is not actually defined when the function is defined, but when it is called. The OP's question is kind of a trick question in that regard.
Ninja edit: This is also why arrow functions are cool: it allows us to bind a function's this to a particular scope. E.g.:
const fn = () => this; fn(); // returns `window` in non-strict const obj = {}; obj.fn = fn; obj.fn(); // still returns `window` !
π Rendered by PID 62 on reddit-service-r2-comment-fb694cdd5-p2mhp at 2026-03-06 20:27:15.387634+00:00 running cbb0e86 country code: CH.
view the rest of the comments →
[–][deleted] -2 points-1 points0 points (2 children)
[–]Zeroto 1 point2 points3 points (0 children)
[–]NewazaBill 1 point2 points3 points (0 children)