----------------------------------------------------------------- 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