Javascript 函数(带变量)——>;功能->;胖箭头功能->;这里显示的第一个函数的变量?
我正在学习传递的词法Javascript 函数(带变量)——>;功能->;胖箭头功能->;这里显示的第一个函数的变量?,javascript,ecmascript-6,arrow-functions,Javascript,Ecmascript 6,Arrow Functions,我正在学习传递的词法this,据我所知,胖箭头的“this”来自其自身或其上方的函数。如果这是一个常规函数,我的理解是它不会从比这个高的函数中得到这个。例如,这是我认为不应该运行的代码: 功能测试(){ this.a=5;//test()'变量 this.b=函数(){ //这是一个胖箭头函数,所以下面的控制台日志可以从这个函数的空间中获取这个,但不能高于这个,但是它可以吗? this.c=setTimeout(()=>{ console.log(this.a); }, 1000); } }
this
,据我所知,胖箭头的“this”来自其自身或其上方的函数。如果这是一个常规函数,我的理解是它不会从比这个高的函数中得到这个。例如,这是我认为不应该运行的代码:
功能测试(){
this.a=5;//test()'变量
this.b=函数(){
//这是一个胖箭头函数,所以下面的控制台日志可以从这个函数的空间中获取这个,但不能高于这个,但是它可以吗?
this.c=setTimeout(()=>{
console.log(this.a);
}, 1000);
}
}
var d=新测试();
d、 b()代码>因为您正在调用函数b作为d.b
它是这是对象d
。所以这个.a
相当于d.a
。正如您已经观察到的,arrow函数将从其父作用域携带this
,因此它能够将this.a
解析为d.a
功能测试(){
this.a=5;//test()'变量
this.b=函数(){
log(“b中的this.a:,this.a”);
this.c=setTimeout(()=>{
log(“c中的this.a:,this.a”);
}, 1000);
}
}
var d=新测试();
d、 b()代码>读取(双关语)
当函数作为对象的方法调用时,其this
设置为调用该方法的对象
考虑这个简化的例子:
“严格使用”;
var obj={
名称:“obj”,
a:函数(){
还这个
}
}
变量a=对象a
变量obj2={
名称:“obj2”
}
obj2.a=a
console.log(
obj.a(),//=>obj
a(),//=>窗口|未定义(基于严格模式)
obj2.a()/=>obj2
)
var d=new test()代码>是我认为的根执行上下文。词法范围查找最终发现变量a
b函数是test的一部分/附加到test,它们具有相同的this指针。