码迷,mamicode.com
首页 > 其他好文 > 详细

箭头函数中 的this指向

时间:2019-11-02 14:08:00      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:UNC   异步回调   执行   col   timeout   set   变量   调用   out   

在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。内部搜索时。只会搜索到其活动对象为止,不会访问外部函数中这两个变量

箭头函数中 的this指向

标签:UNC   异步回调   执行   col   timeout   set   变量   调用   out   

原文地址:https://www.cnblogs.com/-constructor/p/11781295.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!