大白话理解箭头函数this

       var obj1={
            num:4,
            fn:function(){
                num:5;
                var f=() => {
                    num:6;
                    console.log(this.num); 
                    //4 外层非箭头函数包裹,指向fn的作用域,即obj1
                    var f2=() => {
                        console.log(this.num);
                    //4 外层箭头函数包裹,向上寻找非箭头函数,指向fn的作用域,即obj1
                    }
                    f2();
                }
                f();
            }
        }
        obj1.fn();
    function foo() {
            console.log(this) //window
            setTimeout(() => {
                console.log(this) // window
                console.log('id:', this.id);
            }, 100);
        }
        var id = 10;
        foo()
     var obj = {
            x:100,//属性x
            show(){
                console.log(this) // obj
                setTimeout(() => { 
                    console.log(this) // obj
                },1000);
            }
        };
        obj.show();
     function foo() {
            console.log(this)
            //本是window,但使用call更改了this,故为{id:100}
            setTimeout(() => {
                console.log(this)
            // 本应该指向foo的作用域,但由于外层非箭头函数使用call更改了this,故为{id:100}
                console.log(this.id); // 100
            }, 1000);
        }
        var id = 10;
        foo.call({id:100})
var obj={
a:10,
func:()=>{
console.log(this); //window
},
test:function(){
console.log(this); // obj
setTimeout(()=>{
console.log(this); //obj
this.func();
},1);
}
}
obj.test();
       var obj = {
            func: function() {
                console.log('func')
            },
            say: function(){
                console.log(this) // obj
                setTimeout(()=> {
                    console.log(this) //obj
                    this.func() // ‘func’
                }); //
            }
        }
        obj.say(); 
    var obj = {
            func: function() {
                console.log('func')
            },
            say: () =>{
                console.log(this) // window
                setTimeout(function () {
                    console.log(this) //window
                    this.func() // 报错,window下没有func方法
                }); //
            }
        }
        obj.say();     
     var obj = {
            func: function() {
                console.log('func')
            },
            say: () =>{
                console.log(this); // window
                var b=() =>{
                    console.log(this) //window
                    this.func() // 报错,window下没有func方法
                } //
                b()
            }
        }
        obj.say();
     var obj = {
            say: function () {
                'use strict';  
                //  严格模式下,没有宿主调用的函数中的this是undefined
                var f1 = function () {
                    console.log(this); // undefined
                    setTimeout(() => {
                        console.log(this); // undefined
                    })
                };
                f1();
            }
        }
        obj.say()

猜你喜欢

转载自www.cnblogs.com/renzm0318/p/10875107.html