最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • JavaScripts高阶(4)前端逃不过的this、同步异步

    正文概述 掘金(甘草倚半夏)   2021-04-28   545

    this

    function eat(){
        console.log(this)     //window
    }
    eat();
    
    function fn(){
        function b(){
            console.log(this);   //window
        }
        b()
    }
    fn()
    
    
    function n(){
        console.log(this)           //window
    }
    ~function (){
        n()
    }()
    
    var obj={
        fn:function (){
            console.log(this)
        }
    }
    obj.fn()   //this: obj
    var f=obj.fn;
    f()    //this: window
    

    在js非严格模式下this:

    1、自执行函数中的this一般都是window

    var obj={
        fn:(function(){
            // this  window
            return function(){}
        })()
    }
    

    2、给元素的某个事件绑定方法,当事件触发执行对应事件的时候,方法中的this一般都是元素本身

    oBox.onclick=function(){
        //this : oBox
    }
    

    3、还有一种方式能快速区分this:当方法执行的时候,看方法前边是否有 . :有 ..前边是谁this就是谁,没有 .this一般就是window

    var obj={
        fn:function (){
            console.log(this)
        }
    }
    obj.fn()   //this :obj
    var f=obj.fn;
    f()    //this:window
    

    在js严格模式下this:

    如果执行主体不明确,this指向的是undefined(非严格模式下指向的是window)

    "use strict"
    function fn(){
        console.log(this);
    }
    fn()   //=>this:undefined
    window.fn()  //=>  this:window
    

    案例

    function fn(){
        //this:window
        console.log(this)
    }
    document.body.onclick=function(){
        //this:body
        fn();   //执行前边没`.`this : window
    }
    
    //window全局作用域
    //变量提升 var num; var obj;var fn;
    //执行代码 num=1;
    //开辟堆内存空间  aaaffff000
        //存储键值对  num = 2; fn:自执行函数返回的结果
            //自执行函数执行形成私有作用域A  (栈内存A是不能被销毁的  因为被 obj.fn使用了)
                //形参赋值  num = 1
                //变量提升 没有
                //代码执行
                //this.num*=2  (this 是window)           全局num=2
                //num+=2  (私有的形参)                   私有的num =3
                //return  一个函数(引用数据类型)
                    //开辟一个堆内存空间 AAAFFF111
                    //存储字符串
                    //return AAAFFF111
        //fn =AAAFFF111
    //把aaaffff000 赋值给 obj
    
    //fn=obj.fn;   fn = AAAFFF111
    //fn()  找到AAAFFF111 形成私有作用域B
        //形参和变量提升都没有
        //this.num*=3;  this为window            全局  num=6
        //num++;私有作用域中没有向上找到私有作用域A的形参    私有的num =4
        //打印 4
        //作用域B销毁
    //obj.fn()  还是找到AAAFFF111  形成私有作用域
        //形参和变量提升都没有
        //this.num*=3;  this为obj                            obj  num=6
        //num++;私有作用域中没有向上找到私有作用域A的形参    私有的num =5
        //打印 5
        //作用域 销毁
    // 全局 num =6
    // obj  num=6
    //销毁堆内存
        //fn=null;
        //obj.fn=null
        //obj=null
    
    //4  5 6  6 
    var num=1;
    var obj={
        num:2,
        fn:(function(num){
            this.num*=2;
            num+=2;
            return function(){
                this.num*=3;
                num++;        //主要在于 这个num是上级作用域的
                console.log(num)
            }
        })(num)
    }
    var fn=obj.fn;
    fn();
    obj.fn();
    console.log(num,obj.num)
    

    JavaScripts高阶(4)前端逃不过的this、同步异步

    异步 同步


    起源地下载网 » JavaScripts高阶(4)前端逃不过的this、同步异步

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元