JS学习之this关键字

his关键字跟在哪定义没关系,跟在哪执行也没关,this的查找只遵循以下三点
1)自执行函数中的this永远是window
2)给元素的事件绑定方法,当触发事件执行对应方法的时候,方法中的this是当前元素
3)不管函数在哪里面执行,我们就看函数名之前是否有“·”,有的话,前面是谁就是谁,没有就是window

//    var obj={fn1:fn};
//    obj.fn1();//前面有.即为.前的obj
//    函数在定义的时候 ,this指的是谁 是不知道的
//    变量属于哪个作用域,由他在哪儿(作用域)定义有关系
//自运行的函数都是在window下运行的this就是window
var number = 2;
    var obj = {
        number: 4,
        fn1: (function () {
        //自执行时,先声明了一个函数和一个number
            this.number *= 2;//执行时this.number是全局变量number,即window.number=4
            number = number * 2;//这个number为undefined,是这个自执行函数作用域内的number
            var number = 3;//这个作用域内的number被从新定义为数字3
            return function () {
            //返回给fn1
                this.number *= 2;//在没执行之前,这个this无法确定
                number *= 3;//这个number即为自执行函数内定义的number并不是全局变量
                alert(number)
                //弹出的number也是自执行函数内定义的number
            }
        })(),
        db2: function () {
            this.number *= 2
        }
    };
    var fn1 = obj.fn1;
    alert(number);//弹出的为全局变量number 为4
    fn1();//这里面的this即为window 弹出9
    obj.fn1();//这里面的this即为obj 弹出27
    alert(window.number);//弹出8
    alert(obj.number);//弹出8

对上面的代码进行分析,运行之前,先预解释了一个number和一个obj,
当执行当自执行函数那里 时,obj中的fn1属性,对应的属性值是那个自执行函数的返回函数,由于,返回函数被占用了,所以这个自执行这次,产生的作用域不会被释放掉。
又由于自运行的函数只要没有·都是在window下运行的this就是window,故其执行时分析如上注释

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值