js 作用域和 window 对象?

function Dog(name, age) {

  this.name = name;

  this.age = age;

  this.bark = function() {

    this.name += " hello";

    console.log(this.name);

    (function() {

      this.name += "a";

      console.log(this.name);

    })();

  }

};

let dog = new Dog("tep", 2);

dog.bark();


谁能告诉我这里发生了什么事吗?当我打开控制台时,它打印 2 行,分别是


泰普你好

A

每次我重新加载页面时,它都会继续在第2行中添加“a”,并且我在窗口对象中看到,有属性“name”


泰普你好


慕的地6264312
浏览 104回答 1
1回答

绝地无双

在匿名函数中,您会失去this绑定,因此它只是默认为某些内容。在浏览器中它是有效的window。要解决此问题,您可以使用箭头函数,因为它们保留this绑定: (() => {    this.name += "a";    console.log(this.name); })();不过,如果没有特别充分的理由,您不会想要创建此类闭包函数。let它们通常用于确保变量不会“逃逸”,但随着和的引入,const您将不再需要使用它。在这种情况下,使用它绝对没有任何优势,无论如何你都不会产生任何当地人。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript