what's the difference between Browsers and Node?

前端 未结 2 866
没有蜡笔的小新
没有蜡笔的小新 2021-01-02 18:48

what\'s the difference between Browsers and Node? for instance:

setName.js on Node:

var setName;
setName = function (name) {
    return          


        
相关标签:
2条回答
  • 2021-01-02 19:18

    Node is a JavaScript engine, not a browser. The specific reason that you see undefined in Node, and Lulu in a browser? Differences in the global namespace:

    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.

    In the browser, this is a reference to the window object — the browser's global namespace — for all functions which are invoked unattached to an object (e.g. not like foo.bar()). In Node, this is simply not a reference to the global namespace.


    N.B. console.log(this.name) in a Node interpreter will print Lulu, not undefined. That's because, in the REPL only,

    > this === global
    true
    

    Further reading @ How To Node: What is "this?"


    Okay, one more edit as prompted by @Šime Vidas' comment regarding this in ES5 strict mode:

    • In the global context (outside of any function), this refers to the global object, whether in strict mode or not.
    • When the this keyword occurs inside a function, its value depends on how the function is called.
    • When a function is called as a method of an object, its this is set to the object the method is called on.

    More interesting reading courtesy of Juriy Zaytsev (aka @kangax) in one of his blog posts.

    0 讨论(0)
  • 2021-01-02 19:27

    Your browser code has the window host object. Node does not have that host object. When you set this.name, you are actually setting it to the window object aka making a global variable.

    window.name === this.name // true

    0 讨论(0)
提交回复
热议问题