慕的地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();誰(shuí)能告訴我這里發(fā)生了什么事嗎?當(dāng)我打開(kāi)控制臺(tái)時(shí),它打印 2 行,分別是泰普你好A每次我重新加載頁(yè)面時(shí),它都會(huì)繼續(xù)在第2行中添加“a”,并且我在窗口對(duì)象中看到,有屬性“name”泰普你好啊
1 回答

絕地?zé)o雙
TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊
在匿名函數(shù)中,您會(huì)失去this綁定,因此它只是默認(rèn)為某些內(nèi)容。在瀏覽器中它是有效的window。
要解決此問(wèn)題,您可以使用箭頭函數(shù),因?yàn)樗鼈儽A?code>this綁定:
?(() => {
? ? this.name += "a";
? ? console.log(this.name);
?})();
不過(guò),如果沒(méi)有特別充分的理由,您不會(huì)想要?jiǎng)?chuàng)建此類(lèi)閉包函數(shù)。let它們通常用于確保變量不會(huì)“逃逸”,但隨著和的引入,const您將不再需要使用它。
在這種情況下,使用它絕對(duì)沒(méi)有任何優(yōu)勢(shì),無(wú)論如何你都不會(huì)產(chǎn)生任何當(dāng)?shù)厝恕?/p>
添加回答
舉報(bào)
0/150
提交
取消