JS中this的指向问题(面试题)

            // 1.函数直接调用时,默认this指向window;
                function demo(){
                    console.log(this);//第一个this
                    function demo1(){
                        console.log(this);//第二个this
                    }
                    demo1();//在demo调用后,demo1是在demo里面直接调用,所以此时第二个this指向window;
                }
                demo();//在全局中调用,此时第一个this指向window;
                
            // 2.this一般指向它的调用者(全局变量默认是挂载在window中的);
                window.name="小舞";
                let obj={
                    name:"唐三",
                    demo:function demo(){
                            console.log(this.name);//第一个this
                            function demo1(){
                                console.log(this.name);//第二个this
                            }
                            demo1();//由1我们可以知道,此时第二个this指向window,所以输出的结果是 小舞;
                        }
                }
                obj.demo();//demo是obj调用的,此时第一个this指向的就是obj,输出的结果是 唐三;
                
            // 3.ES6的箭头函数中,this只指向它的创建者(声明时它所在的作用域);
                window.name="小舞";
                let obj={
                    name:"唐三",
                    demo:function demo(){
                            console.log(this.name);//第一个this
                            let demo1=()=>{
                                console.log(this.name);//第二个this
                            }
                            demo1();//demo1是一个箭头函数,所以此时第二个this指向的也是obj,结果是 唐三;
                        }
                }
                obj.demo();//demo是一个传统函数,所以第一个this还是指向它的调用者obj,结果是 唐三;

你可能感兴趣的:(js)