JS学习之this关键字

来源:互联网 发布:nginx 配置ssl模块 编辑:程序博客网 时间:2024/06/15 00:41

his关键字跟在哪定义没关系,只跟在哪执行有关系这是在window下执行,这里弹出的this就是window
// var obj={fn1:fn};
// obj.fn1();//这是在obj下执行,即弹出的是object
// 函数在定义的时候 ,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,故其执行时分析如上注释

0 0
原创粉丝点击