'this' different between REPL and script
After reading through mozilla docs I found this:
In the global execution context (outside of any function), this refers to the global object, whether in strict mode or not.
After playing with scopes for a little I found that in node.js REPL...
> this === global
true
but when I create a script with the same line...
$ cat > script.js
console.log(this === global)
$ node script.js
false
Is there a reason for this? Or is it a bug?
Solution 1:
Node's REPL
is global. Code from a file is in a "module", which is really just a function.
Your code file turns into something like this very simplified example:
var ctx = {};
(function(exports) {
// your code
console.log(this === global);
}).call(ctx, ctx);
Notice that it's executed using .call()
, and the this
value is set to a pre-defined object.