In what object does Node.js store variables?

后端 未结 3 556
野趣味
野趣味 2020-12-11 21:17

in my server.js:

If I type:

var yo = 123;
console.log(global.yo); // undefined
console.log(this.yo); // undefined

in the browser th

相关标签:
3条回答
  • 2020-12-11 21:30

    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.

    0 讨论(0)
  • 2020-12-11 21:39

    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.

    0 讨论(0)
  • 2020-12-11 21:55

    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
    
    0 讨论(0)
提交回复
热议问题