what\'s the difference between Browsers and Node? for instance:
setName.js on Node:
var setName;
setName = function (name) {
return
Node is a JavaScript engine, not a browser. The specific reason that you see undefined in Node, and Lulu in a browser? Differences in the global namespace:
In browsers, the top-level scope is the global scope. That means that in browsers if you're in the global scope
var somethingwill define a global variable. In Node this is different. The top-level scope is not the global scope;var somethinginside a Node module will be local to that module.
In the browser, this is a reference to the window object — the browser's global namespace — for all functions which are invoked unattached to an object (e.g. not like foo.bar()). In Node, this is simply not a reference to the global namespace.
N.B. console.log(this.name) in a Node interpreter will print Lulu, not undefined. That's because, in the REPL only,
> this === global
true
Further reading @ How To Node: What is "this?"
Okay, one more edit as prompted by @Šime Vidas' comment regarding this in ES5 strict mode:
- In the global context (outside of any function),
thisrefers to the global object, whether in strict mode or not.- When the
thiskeyword occurs inside a function, its value depends on how the function is called.- When a function is called as a method of an object, its
thisis set to the object the method is called on.
More interesting reading courtesy of Juriy Zaytsev (aka @kangax) in one of his blog posts.
Your browser code has the window host object. Node does not have that host object. When you set this.name, you are actually setting it to the window object aka making a global variable.
window.name === this.name // true