天天看點

jquery js解析函數、函數直接調用

-----------------------------------------------------------------
cc = function(){alert(345)},
pushStack = function() {
    cc();
},
pushStack();//345

//沒加var的放在window對象中
pushStack = function() {
    cc();
},
cc = function(){alert(345)},
pushStack();//345
----------------------------------------------------------------
pushStack = function() {
    cc();//cc is not defined
};
pushStack();
cc = function(){alert(345)};


pushStack = function() {
    cc();
};
pushStack();//345
function cc(){alert(345)};
----------------------------------------------------------------
cc = function(){alert(345)};
pushStack();//pushStack is not defined ,js解析器執行到這裡的時候pushStack還是未定義
pushStack = function() {
    cc(); 
};

cc = function(){alert(345)};
pushStack();//345,js解析器執行到這裡的時候pushStack已經定義了
function pushStack() {
    cc(); 
};      
name = '2';
a = function(){
    alert(this.name);
    alert(888);
},
o = {
    fn1 : function(){
            a = function(){ 
            //fn1執行的時候(fn1要執行,不執行是加不進去的)把a加到window裡面去,把外部的a方法覆寫了
                alert(this.name);//2  window
                alert(this);//2
                alert(666);
            };
            a();//666  a.call(window)
            window.a();//666
    }
}
o.fn1();
window.a();// 2   666      
name = '2';
a = function(){
    alert(this.name);
    alert(888);
},
o = {
    fn1 : function(){
            this.a = function(){//fn1執行,給o對象加了a方法
                alert(this.name); 
                alert(this);
                alert(666);
            };
            a(); //2   888    a.call(window)   ,都是從window中找a()沒有就報錯
            window.a(); //2  888
    }
}
o.fn1();
window.a();// 2   888
o.a();//666      
name = '2';
a = function(){
    alert(this.name);
    alert(888);
},
o = {
    fn1 : function(){
            var a = function(){ //fn1函數執行,就有2個a方法,一個在fn1局部作用域,一個在window
                alert(this.name); 
                alert(this);
                alert(666);
            };
            a(); //2  666  a.call(window),查找局部作用域的a方法
            window.a(); // 2  888
    }
}
o.fn1();
window.a();//  2   888      
jQuery = function() {
            alert(1);
            return new jQuery.fn.init();
        },
        jQuery.fn = jQuery.prototype = {//fn是類的靜态屬性
        //能夠調用jQuery原型裡(constructor()、pushStack())方法的隻能是jQuery對象或者init對象:$('div')。
                constructor: jQuery,
                init: function() {
                },
                //$('div').pushStack,this是$('div'),
                pushStack: function() {
                    alert(2);
                    this.constructor();//1,  this是init對象或者jQuery對象$('div'),傳回的是新的空init對象
                    constructor();//constructor.call(window),調不了報錯,
                },
        }
        jQuery.fn.init.prototype = jQuery.fn;
        var j = constructor();//window調用不了
        $('div').pushStack();//1,2,1, $('div')是init對象可以調用pushStack()方法
        o = {}
        o.pushStack();//o.pushStack is not a function,能夠調用pushStack方法是jQuery的對象後者init對象,
        new jQuery.fn.init().pushStack();//2 1      
上一篇: 作業4