Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between node.js and chrome in v8

chrome version 49.0.2623.110 m

node v5.10.0

Here is my code:

var a = 0;

(function() {
    this.a = 1;
    this.b = 2;
    console.log(a);
} )();

console.log(a);
console.log(b);

chrome gives

1
1
2

node gives

0
0
2

Why does that happen?

Thanks

like image 233
Eu Insumi Prunc Avatar asked Dec 18 '22 18:12

Eu Insumi Prunc


1 Answers

When a function is called without context (and you are running in non-strict mode) this defaults to the global object.

In a browser the top-level of your source code runs in the global context, so this.a, which is window.a is the same as the var a declared in the global context at the top. Assigning this.a = 1 is the same as assigning a = 1.

In node.js each JavaScript file gets its own module context that is separate from the global context, so var a = 0; is not creating a global, and the global you created with this.a = 1; will be shadowed by the modules own a.

like image 69
Paul Avatar answered Dec 28 '22 06:12

Paul