为了账号安全,请及时绑定邮箱和手机立即绑定

js 作用域和 window 对象?

js 作用域和 window 对象?

慕的地6264312 2023-07-14 09:54:39
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您将不再需要使用它。


在这种情况下,使用它绝对没有任何优势,无论如何你都不会产生任何当地人。


查看完整回答
反对 回复 2023-07-14
  • 1 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信