Shai UI
Shai UI

Reputation: 51978

In what object does Node.js store variables?

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

Answers (3)

Bergi
Bergi

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

Max
Max

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

Kara Brightwell
Kara Brightwell

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

Related Questions