this的作用域一直搞不懂,不多说上代码 var a = 1;
var b = {
a:2,
test:function(){
var a = 3;
console.log(this)
return function(){
console.log(this);
}
}
}
b.test()(); // 2 1
这个我的理解是b.test()返回了匿名函数 ,再执行该函数有点像var c = b.test();c();所以返回的匿名函数中this是指向全局变量window的。
but,再看这代码,把function改成箭头函数 var a = 1;
var b = {
a:2,
test:function(){
var a = 3;
console.log(this.a)
return ()=>{
console.log(this.a);
}
}
}
b.test()(); // 2 2
这个我就不太懂了,我知道箭头函数中的this是指向该作用域中的上一层作用域。
但是如果按照上一个理解,该匿名函数已经被返回,当前的作用域指的是window,所以返回的箭头函数指向的不是window的上一层?但是此时的this确实指向b中的作用域。这个确实一头雾水???
ps:实测如果直接调用全局箭头函数,this还是指向window,这是window的上一层没有window?还是null? 还是如果箭头函数是全局变量this就是返回window?(这个有大佬知道可以请教下小弟)
var b = {
a:2,
test:function(){
var a = 3;
console.log(this)
return function(){
console.log(this);
}
}
}
b.test()(); // 2 1
这个我的理解是b.test()返回了匿名函数 ,再执行该函数有点像var c = b.test();c();所以返回的匿名函数中this是指向全局变量window的。
but,再看这代码,把function改成箭头函数 var a = 1;
var b = {
a:2,
test:function(){
var a = 3;
console.log(this.a)
return ()=>{
console.log(this.a);
}
}
}
b.test()(); // 2 2
这个我就不太懂了,我知道箭头函数中的this是指向该作用域中的上一层作用域。
但是如果按照上一个理解,该匿名函数已经被返回,当前的作用域指的是window,所以返回的箭头函数指向的不是window的上一层?但是此时的this确实指向b中的作用域。这个确实一头雾水???
ps:实测如果直接调用全局箭头函数,this还是指向window,这是window的上一层没有window?还是null? 还是如果箭头函数是全局变量this就是返回window?(这个有大佬知道可以请教下小弟)
解决方案 »
- IE6和IE7js获取jquery的document对象
- 新闻用ajax将数据库表的标题取出显示,怎么用onclick()获取到输出的标题?
- 我要如何取得 asp的Response.Write 出来的 element
- 高分寻JQuery高人帮忙~~
- 如何用js把当前时间的分钟和下一个时间的分钟分别赋个2个变量??
- 有人可以帮我看看吗?为什么只执行了var a = document.getElementsByTagName("a");而div没执行!
- 一个类似驾考理论考试系统全屏功能实现问题,求助
- 如何用javascript实现:提交表单后,当前页面不变。
- 在线求助:有没有方法使得文本框中输入的字母自动变为大写?
- fason(阿信),请来领分!他人勿入
- jdk没写入本地接口
- 快速排序
你这个箭头函数是在test函数中定义的,那么这个箭头函数的上一层作用域就永远是test函数执行时所产生的作用域。不论箭头函数在什么地方调用都不会改变。这也就是闭包效应。