簡體   English   中英

箭頭回調中的此綁定 function

[英]this binding in an arrow callback function

感謝您的幫助和解釋。 我不清楚下面代碼中的第二個和第三個警報與第一個警報不同的原因。

箭頭函數具有詞法綁定。 這一點很清楚。 為什么在 object 方法調用中包含箭頭 function 表達式作為參數會對“this”產生影響,它以某種方式綁定到全局名稱變量。

var name = "globalscope name";

let person = {
    name: 'Tommy',
   
    showName(a){
        let fun1 = ()=>this.name;
        let fun2 = a;
        alert(fun1()); //Tommy - this is behaving as expected base on lexical binding
        alert(a()); // globalscope name - this is not
        alert(fun2()); //globalscope name
    }
}

person.showName(()=>this.name);

this的詞法綁定意味着this值是從聲明 function 的位置復制的。

最后一行聲明的 function 在 scope 中, thiswindow

在 showName 的第一行聲明的showName在 scope 中, this取決於調用showName的方式。


this值是從聲明 function 的 scope 復制的,而不是在傳遞到調用它的 function 之前立即復制的。

在此代碼塊中person.showName(()=>this.name); this.name指的是window object 其中 window object name值是 globalscope globalscope name

你調用 object 方法person.showName ,你只是傳遞一個 function 引用以及this.name (window.name)因為a()fun2()提供結果全局范圍名稱

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM