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”泰普你好啊
1 回答
绝地无双
TA贡献1946条经验 获得超4个赞
在匿名函数中,您会失去this绑定,因此它只是默认为某些内容。在浏览器中它是有效的window。
要解决此问题,您可以使用箭头函数,因为它们保留this
绑定:
(() => {
this.name += "a";
console.log(this.name);
})();
不过,如果没有特别充分的理由,您不会想要创建此类闭包函数。let它们通常用于确保变量不会“逃逸”,但随着和的引入,const您将不再需要使用它。
在这种情况下,使用它绝对没有任何优势,无论如何你都不会产生任何当地人。
添加回答
举报
0/150
提交
取消