袋鼠手游v9.7.2
在袋鼠手游软件中的游戏非常丰富,大家在这里可以轻松找到各种类型的游戏,且提供的游戏是免费的,用户可以在线选择自己喜欢的游戏进行下载然后领取游戏福利...
2024-12-29
关键词:箭头函数,作用域
问题
在全局作用域下,箭头函数作为对象方法时,this会指向:
var name = "Bob";
obj = {
name: "John",
sayHello: () => {
console.log( this.name);
},
};
obj.sayHello(); // Bob,而不是John
前提
要解决这个问题,要先知晓两个前提。
箭头函数的this指向箭头函数本身所在的作用域的this
var fruits= ["watermelon", "mango"];
obj = {
likes: {
fruits: ["apple", "banana"],
getLikes() {
console.log(this); // this在这里指likes
let getFruits = () => {
// 箭头函数在getLikes函数体内,
// 因此this在这里也是likes
console.log(this.fruits);
};
getFruits();
},
},
};
obj.likes.getLikes(); // ["apple", "banana"]
函数作用域链在声明函数时就已经确定了,如下所示:
var a = 10;
function foo() {
console.log(a);
}
function bar() {
var a = 20;
foo();
}
bar(); // 10, 而不是20
解释
上面的前提一就可以解释文章开头的问题了(见代码注释)。因此箭头函数一般不作为方法使用。
var name = "Bob";
obj = {
name: "John",
sayHello: () => {
// 箭头函数声明时在全局作用域,
// 因此this代表window(严格模式下为undefined)【见前提1】
console.log(this.name);
},
};
obj.sayHello(); // Bob,而不是John
// 在obj外调用sayHello
function foo() {
obj.sayHello();
}
foo(); // 也是Bob,而不是John【前提2】
参考链接
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,请告知我们,本站将立刻删除涉嫌侵权内容。
相关文章
有哪些好用的破解版游戏盒子?今天小编为大家分享十款非常不错的破解版游戏盒子排名,你可以每天都能看到最新破解游戏资源,游戏盒子安全无毒,可以放心哦!...
2024-12-29
和好奇心日报风格相近的一款媒体网站,关注城市、国际、财经、文娱、时尚等行业:事件舆论场——知微事见 - 最全的互联网社会热点聚合平台。...
2024-12-29
为有力保证事情或工作开展的水平质量,常常需要提前制定一份优秀的方案,方案是计划中内容最为复杂的一种。那么制定方案需要注意哪些问题呢?以下是小编精心整理的圣诞元旦...
2024-12-29
随着地下城与勇士的95版本开放,很多玩家都把自己的等级升到了95级,更有很多欧皇玩家已经毕业了自己的苍穹幕落武器。武器毕业了,并不是完全的毕业,你还要把自己的苍...
2024-12-29
热评文章
2022年专属火龙之神途新版
1.80龙神合击传奇
1.76永恒小极品+5复古传奇
1.76双倍魔天大极品第三季单职业
1.76神梦传奇三职业
1.80聖统圣统合击三职业传奇