当前位置: 首页 > 后端技术 > Node.js

箭头函数中this的指向问题

时间:2023-04-03 17:18:30 Node.js

this指向箭头函数等箭头函数javascriptthis“箭头函数”this总是指向定义所在的对象,而不是运行所在的对象。箭头函数在foo函数内部。只有foo函数运行后(被调用后,内部this确定),才会根据定义生成,所以foo运行的对象就是箭头函数定义的对象functionfoo(){setTimeout(()=>{console.log("id:",this.id);},100);}varid=21;//箭头函数运行的环境foo.call({id:42});//箭头函数定义的环境//结果是id:42functionfoo(){return()=>{return()=>{return()=>{console.log("id:",this。ID);};};};}varf=foo.call({id:1});vart1=f.call({id:2})()();vart2=f().call({id:3})();vart3=f()().call({id:4});//结果为:1,1,1varobj={field:'hello',getField:()=>{//此时箭头函数定义完毕,this指向obj的this,obj的this为window,则this箭头函数的this指向windowconsole.log(this)},}obj.getField();//window的箭头函数中不仅没有this,没有arguments,super……vararguments=42;vararr=()=>arguments;arr();//42functionfoo(){varf=(i)=>arguments[0]+i;//foo函数的间接参数绑定returnf(2);}foo(1);//3varf=(i)=>参数;f(1);//arguments不是通过call或apply定义的call()或apply()方法调用函数时,只传入参数,对this没有影响varadder={base:1,add:function(a){varf=v=>v+这个.base;返回f(a);},addThruCall:function(a){varf=v=>v+this.base;varb={base:2};返回f.call(b,a);};console.log(adder.add(1));//输出2console.log(adder.addThruCall(1));//仍然输出2个箭头函数不能用作构造函数,与new一起使用时会抛出错误varFoo=()=>{};varfoo=newFoo();//TypeError:Foo不是构造函数箭头函数没有原型属性。varFoo=()=>{};console.log(Foo.prototype);//undefinedyield关键字一般不能用在箭头函数中(除非嵌套在允许使用的函数中)。因此,箭头函数不能用作生成器。参考MDNzhengweikeng的博客可以说是很厉害了,图形javascriptthis指向什么?阮一峰es6关于箭头函数的讨论this