亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 130 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號