[英]Arrow function scope vs regular function scope
我已經閱讀了 JavaScript 中箭頭函數和常規函數之間的區別,因此我制作了一個小 node.js 演示項目來了解我所學到的東西。
let name = 'file Scope'
class User {
name = "Class Scope"
arrow = () => {
console.log("Arrow name " + this.name);
}
normal() {
console.log("Normal name " + this.name);
}
test() {
return {
name: "Object Scope",
n: this.normal,
a: this.arrow,
nested: {
name: 'Nested Object Scope',
nestedNormal: function () {
console.log("Nested Normal " + this.name);
},
nestedArrow: () => {
console.log("Nested Arrow " + this.name);
}
}
}
}
}
let user = new User();
user.test().n(); //Normal name Object Scope
user.test().a();//Arrow name Class Scope
user.test().nested.nestedNormal();//Nested Normal Nested Object Scope
user.test().nested.nestedArrow();//Nested Arrow Class Scope
控制台輸出不是預期的,我認為nestedArrow()函數會返回Object Scope,但否則它返回Class Scope 。
為什么“this.name”指的是類中的名稱而不是嵌套對象內部的名稱?
箭頭函數在test()
函數內部聲明,因此它從該函數中獲取this
的值。
您調用了user.test()
以便在內部test
this
的值與user
的值相同。
user.name
是"Class Scope"
。
進一步閱讀: 對象文字/初始值設定項中的自引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.