JavaScript及jQuery学习笔记(2)
最后更新日:2014年11月17日
下面对整体外层的(function(window){})(window);进行改造。看下function(window){}中的window。jquery源码中写为:function(global,factory){},我们打印出来可以看到global就是window对象,factory为undefined,因为我没有第二个参数(不明白我说的是什么意思?没关系,继续看下去就明白了。),如果你再给他加其它参数,往后打印出来的都是undefined。在jquery之前的版本写为:
(function(window,undefined){}(window))。
<html> <head> <script> function test(){ $("#v").say(); }; (function (global,factory){ /* 此处小弟没什么经验,不明白为什么要做这些判断,总之就是调用了function(window[,noGlobal])方法。 在下个代码片段中将举个例子具体说明下。 */ if ( typeof module === "object" && typeof module.exports === "object" ) { module.exports = global.document ? factory( global, true ) : function( w ) { if ( !w.document ) { throw new Error( "jQuery requires a window with a document" ); } return factory( w ); }; } else { factory( global ); } })(typeof window!=="undefined"?window:this,function(window, noGlobal){ //这里照着jquery的源码,我把原来在上面的搬到下面了,是一样的 var test = (function(){ var t = function(id){ return new test.n.o(id); }; t.n = t.prototype = { o : function(id){ return { say : function(){ var change = document.getElementById(id.substring(1,id.length)); change.innerHTML = "我是未来"; change.style.width = "100%"; change.style.height = "100%"; change.style.fontSize = "100px"; change.style.backgroundColor = "yellow"; } }; } }; return t; }()); window.$ = window.jquery = test; }); </script> <style type="text/css"> div{ background-color:red; width:20%; height:20%; } </style> </head> <body> <div id="v" onclick="test()">请在此区域内点击我</div> </body> </html>
下面举个例子,说明下,为什么和之前的效果是一样的:
<!DOCTYPE html> <html> <head> <script> (function (x,y){ console.log(x);//输出window对象 console.log(y);//输出 function(a,b){//TODO} })(window,function(a,b){ //TODO }); </script> </head> <body> </body> </html>
看到了吗?!x就对应着window,y就对应着闭包function(a,b){}。我要执行这个闭包不就只要y(a,b)就可以了吗!!!再看下面的示例:
<!DOCTYPE html> <html> <head> <script> (function (x,y){ if(y!=undefined){ y(3,7); }else{ console.log("从这个示例来看,不会执行到我"); } })(window,function(a,b){ console.log(a+b); }); </script> </head> <body> </body> </html>
OK!!!至此,以后我们只要把重点全部放在function(window,noGlobal){...}里面就可以了,你自己可以看看jquery的源码万把行都是写在这里面的。
相关推荐
EdwardSiCong 2020-11-23
85477104 2020-11-17
hhanbj 2020-11-17
81427005 2020-11-11
seoppt 2020-09-13
honeyth 2020-09-13
WRITEFORSHARE 2020-09-13
84483065 2020-09-11
momode 2020-09-11
85477104 2020-08-15
83510998 2020-08-08
82550495 2020-08-03
tthappyer 2020-08-03
84901334 2020-07-28
tthappyer 2020-07-25
TONIYH 2020-07-22
tztzyzyz 2020-07-20
83510998 2020-07-18
81463166 2020-07-17