看到的一道题

 var number = 5;
    var obj = {
        number: 3,
        fn1: (function () {       // 立即执行函数,会马上调用
            var number;           // 声明一个number,值为undefined
            this.number *= 2;     // 由于函数被立即调用且是匿名函数,此时this指向window,全局number = 10
            console.log(this)     //window
            number = number * 2;  //匿名函数内number此时为undefined
            number = 3;           //匿名函数内赋值为3
            return function () {  // 返回一个函数
                var num = this.number;
                console.log(this)    //根据调用者来判定指向
                this.number *= 2; 
                console.log(num);
                number *= 3;  //通过作用域链查找
                console.log(number);
            }
        })()
    }
    var fn1 = obj.fn1;
    fn1.call(null); // 10 9  
    obj.fn1(); // 3,27
    console.log(window.number);//20    

刚开始有点懵,但一步步理解之后,豁然开朗

猜你喜欢

转载自www.cnblogs.com/yuliy/p/12740885.html