Reputation: 51978
in my server.js:
If I type:
var yo = 123;
console.log(global.yo); // undefined
console.log(this.yo); // undefined
in the browser this would be window.yo, so is there some object in Node where this variable is stored?
Upvotes: 4
Views: 2210
Reputation: 665536
JavaScript, regardless whether on the browser or on the server, does not store local declared variables on any object, they just exist in the scope (and cannot be accessed as properties on anything).
The only exception are global variables, which are accessible as properties of the global object (a language term). In browsers, that object is exposed as window
, in Node it is exposed as global
. It also is the value of the this
binding in global code.
As stated in the other answers, a file executed with node is not global code, but lives in a module scope, so you usually won't observe this behaviour for any declared variables. It works in the REPL, though:
$ node
> var yo = 123;
> global.yo
123
^C
$ echo "var yo = 123; console.log(global.yo)" > test.js
$ node test.js
undefined
$ echo "yo = 123; console.log(global.yo)" > test.js
$ node test.js
123
Upvotes: 3
Reputation: 368
When you declare a variable in javascript with the 'var' keyword it will define the variable in the local scope.
Specifically for browser declering a variable in the global scope will set it to window.
In node declerin a variable with var will always be local. We will never be without a scope. We'll always have the module level.
So no, the variable is not assigned to any object.
Upvotes: 1
Reputation: 2565
Short answer: no.
Slightly longer answer:
The Node.js documentation says:
In browsers, the top-level scope is the global scope. That means that in browsers if you're in the global scope
var something
will define a global variable. In Node this is different. The top-level scope is not the global scope;var something
inside a Node module will be local to that module.
An important point to remember is that in Node.js, everything is a module. This includes entry files (i.e. files you run as node blah.js
). So every variable being local to its module, they're not accessible on global
like they would be on window
in the browser:
var yo = 123;
console.log(window.yo); //⇒ 123
But in Node:
var yo = 123;
console.log(global.yo); //⇒ undefined
console.log(module.yo); //⇒ undefined
I can't find any documentation that points this behaviour out, though.
Upvotes: 2