Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数(带变量)——>;功能->;胖箭头功能->;这里显示的第一个函数的变量?_Javascript_Ecmascript 6_Arrow Functions - Fatal编程技术网

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指针。