zoukankan      html  css  js  c++  java
  • 箭头函数 函数中的this指向

      // 箭头函数
            // 在匿名函数中,使用 => 箭头来替换 关键词 function 
            // 箭头定义下 () 和 {} 之间
            // 等于在使用新的关键词声明 函数

            // 箭头函数的主要作用是,改变 函数中的 this 指向 
            // 为了 配合 构造函数语法

            // 普通的匿名函数
            var fun = function(){};

            // 箭头函数声明的匿名函数
            var fun = () => {}

            // 如果只有一个形参要定义,可以不写()
            var fun = function(e){}
            var fun = (e) => {}
            var fun = e => {}

            // {}中如果只有一行执行程序,可以不写{}
            var fun = function(){console.log();}
            var fun = () => { console.log(); }
            var fun = () => console.log();

            // 只有一个参数,并且只有一行代码,(),{}都可以不写
            var fun = function(e){console.log(e);}
            var fun = e => { console.log(e); }
            var fun = e => console.log(e);
     
     
      <div>123</div>
        <script>
            const oDiv = document.querySelector('div');
            const arr = [1,2,3,4,5];
            console.dir(arr);
            
            // 函数中的this指向
            // this 只 存在于 函数,构造函数中 才会有 this
            // 其他程序语句中是没有this的

            // 如果你该不清楚this指向是谁,直接在程序中console.log(this),瞅瞅

            // this的作用是 替换替代,this指向的对象

            // 在对象中的this,指向的是,定义这个函数的对象本身
            // this.属性等于就是 这个 对象.属性
            // const fdjkasfjdsiauewrjnewkj = {
            //     name:'张三',
            //     age:18,
            //     sex:'男',
            //     fun:function(){
            //         console.log(this);
            //         console.log(this.name , this.age , this.sex);
            //     }
            // }

            // fdjkasfjdsiauewrjnewkj.fun();


            // 函数中的this指向

            // 普通函数 ---- 不是构造函数,不是箭头函数等,就是通过function声明的函数
            

            // this指向是window
            function fun1(){
                console.log(this);
            }
            fun1();
            window.fun1();
            
            // this指向是window
            var fun2 = function(){
                console.log(this);
            }
            fun2();
            window.fun2();
            
            // this指向是存储这个函数的对象
            // const obj = {fun:function(){}}
            obj.fun()
            
            // this指向是绑定事件的标签对象
            // e事件对象,指向的是触发事件的标签对象
            // oDiv.onclick = function(){
            //     console.log(this);
            // }

            // this指向是绑定事件的标签对象
            // document.addEventListener('click' , function(){console.log(this)} )
            
            // this指向是window  
            // arr.forEach(function(){console.log(this)});
            
            // this指向是window  
            // setInterval( function(){
            //     console.log(this);
            // } , 1000 );

            // this指向是window  
            // setTimeout( function(){
            //     console.log(this);
            // } , 1000 );


            // 总结:
            // window : 是 BOM 操作的顶级对象
            //          JavaScript会把 声明式定义的函数 赋值式的匿名函数 存储在 window顶级对象中
            //          调用 window中定义的函数方法,可以不写 window    alert()  window.alert()
            //          调用 fun1()  实际上,本质是在调用 window.fun1()
            // 对象   : 调用对象中函数,通过  对象.函数键名()
            // 以上两种情况,this指向的都是 点之前的对象

            // 事件处理函数 : on...绑定语法 addEventListener 监听语法
            //               this指向都是 函数前 绑定函数的标签对象

            // 定时器,延时器 : 实际也是存储在 window 中
            //                调用时 实际上也是 window.定时器  window.延时器

            // forEach 的 this 指向是 window
            //         forEach 是存储在 数组中 
            //         理论上,语法是 arr.forEach
            //         理论上,this指向应该是 arr 数组
            //         只有函数有this指向,arr数组本身是没有this指向的
            //         没有this指向,指向的是父级程序的this指向,arr的父级,就是window顶级对象

            // 总结: 通过 function 声明的函数,this指向的都是
            //       调用函数时,函数之前写的内容
            //       数组是特殊的内容,forEach 循环变量数组, this指向window

        </script>
    右侧打赏一下 代码改变世界一块二块也是爱
  • 相关阅读:
    ASP.NET Zero--后端应用程序
    ASP.NET Zero--前期要求
    ASP.NET Zero--解决方案结构(层)
    ASP.NET Zero--开发指南
    Pos终端中的主密钥、工作密钥、pin密钥、mac密钥
    location.origin不兼容IE8解决方案
    一些常用的meta标签
    c#核心基础-委托
    springBoot项目启动去掉多余的启动日志
    如何发行自己的TRC20代币,并上线JustSwap去中心化交易所
  • 原文地址:https://www.cnblogs.com/ht955/p/14092045.html
Copyright © 2011-2022 走看看