在javscript中,this 是在函数运行时自动生成的一个内部指针,它指向函数的调用者。
箭头函数有些不同,它的this是继承而来, 默认指向在定义它时所处的对象(宿主对象),而不是执行时的对象。
var name = "window"; var test = { name:"demo", // 传统函数 getName1: function(){ console.log(this.name); // demo var that = this; setTimeout(function(){ console.log(this.name); // window console.log(that.name); // demo },500) }, // 箭头函数-作为异步回调 getName2:function(){ setTimeout(()=>{ console.log(this.name) // demo },500) }, // 箭头函数-作为直接执行的方法 getName3:()=>{ console.log(this.name) // window } };
如上getName3(),将箭头函数作为直接执行的方法来写时要特别小心,它的this会直接指向window。
我发现真是有趣
箭头函数this的指向就像人一出生下来就决定了的事情
出生时候爸爸所在的环境 = { 你的姓: "张", 出生:function() { var 你的姓 = "3" var 爸爸 = () => { var 你的姓 = "2" console.log(this.你的姓)} //这里面就是养你的爸爸所在的环境 return 爸爸 } } 出生时候爸爸所在的环境.出生()() VM1229:7 张
由上面可以总结出this的指向是在定义它时所处的对象
箭头函数不会创建自己的this,它只会从自己的作用域链的上一层继承this
总结
1.若调用者内部没有this指定的变量指 不会随作用域链向上查询。直接返回undefined
2.函数调用的时候有两张:作为函数调用 作为方法调用
作为方法调用: this指向为调用者 //闭包函数: 那么this指向全局,因为此时闭包中函数的调用作为函数调用
//箭头函数:箭头函数的调用,指向定义的位置对象所在的作用域。this是继承而来的
3.由于箭头函数没有自己的this指向,所以bind apply call无效
4.每个函数在调用的时候,其活动对象会自动获得两个特殊变量:arguments和this。内部搜索时。只会搜索到其活动对象为止,不会访问外部函数中这两个变量
原文地址:https://www.cnblogs.com/-constructor/p/11781295.html
时间: 2024-10-27 18:08:17