[英]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 中, this
是window
。
在 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.