Èç½ñ£¬ÔÚ´´½¨Ò»¸öWebÓ¦ÓõĹý³ÌÖУ¬ÄãÐèÒª×ö³öÐí¶à¼Ü¹¹·½ÃæµÄ¾ö²ß¡£µ±È»£¬Äã»áÏ£Íû×öµÄÿһ¸ö¾ö¶¨¶¼ÊÇÕýÈ·µÄ£ºÄãÏëҪʹÓÃÄܹ»¿ìËÙ¿ª·¢µÄ¼¼Êõ£¬Ö§³Ö³ÖÐøµÄµü´ú£¬×î¸ßµÄ¹¤×÷ЧÂÊ£¬Ñ¸ËÙ£¬½¡×³ÐÔÇ¿¡£ÄãÏëÒª¾«ÒæÇ󾫲¢ÇÒ×ã¹»Ãô½Ý¡£ÄãÏ£ÍûÄãÑ¡ÔñµÄ¼¼ÊõÄܹ»ÔÚ¶ÌÆÚºÍ³¤ÆÚÉ϶¼ÈÃÄãµÄÏîĿȡµÃ³É¹¦¡£µ«ÕâЩ¼¼Êõ¶¼²»ÊÇÇá¶øÒ×¾Ù¾ÍÄÜÑ¡³öÀ´µÄ¡£
ÎҵľÑ鏿ËßÎÒ£¬È«Õ»Ê½JavaScript·ûºÏÁËÕâËùÓеÄÒªÇ󡣿ÉÄÜÄãÒѾ·¢ÏÖÁËЩÐí¶ËÄߣ¬ÓÖ»òÐíÄãÒѾÔÚ¿¼ÂÇËüµÄʵÓÃÐÔ£¬²¢ÇÒÔÚºÍÅóÓÑÌÖÂÛÕùÂÛËüµÄ»°Ìâ¡£µ«ÊÇÄãÊÇ·ñÇ××Ô³¢ÊÔ¹ýÄØ£¿ÔÚÕâÆªÎÄÕÂÖУ¬ÎÒ»á¶ÔÓÚȫջʽJavaScript¸ø³öÒ»¸ö±È½ÏÈ«ÃæµÄ½éÉÜ£¬ÎªÊ²Ã´Ëü»áÊÇÕýÈ·µÄÑ¡Ôñ£¬ËüÓÖÊÇÈçºÎʩչËüµÄħ·¨µÄ¡£
Ïȸø³öÒ»¸ö¸ÅÀ¨Ô¤ÀÀ£º

½ÓÏÂÀ´ÎÒ»áÒ»ÏîÒ»ÏîµØ½éÉÜÕâЩ×é¼þ¡£µ«ÊÇÔÚÕâ֮ǰ£¬ÎÒÃǼò¶ÌµØ»Ø¹Ëһϣ¬ÎÒÃÇÊÇÈçºÎ·¢Õ¹µ½ÏÖÔÚµÄÕâ¸ö½×¶ÎµÄ¡£
ÎÒΪʲôѡÔñÓÃJavaScript
´Ó1998Ä꿪ʼ£¬ÎÒ¾ÍÊÇÒ»¸öWeb¿ª·¢Õß¡£µ±Ê±£¬ÎÒÃÇʹÓÃPerl½øÐдó¶àÊýµÄ·þÎñÆ÷¶ËµÄ¿ª·¢£»µ«ÊÇ´ÓÄÇʱºò¿ªÊ¼£¬ÎÒÃǾÍÔÚ¿Í»§¶ËʹÓÃJavaScript¡£Web·þÎñÆ÷¶ËµÄ¼¼ÊõÒѾ·¢ÉúÁË·Ì츲µØµÄ±ä»¯£ºÎÒÃDZ»Ò»²¨ÓÖÒ»²¨µÄ¼¼Êõ³±Á÷ÍÆ×ÅÍùǰ×ߣ¬PHP£¬ASP£¬JSP£¬.NET£¬Ruby£¬Python£¬ÕâÀïÖ»ÁгöÁ˼¸¸öÀý×Ó¡£¿ª·¢ÈËÔ±ÃÇ¿ªÊ¼Òâʶµ½£¬ÔÚ·þÎñÆ÷¶ËºÍ¿Í»§¶ËʹÓò»Í¬µÄÓïÑÔʹµÃÊÂÇé±äµÃ¸´ÔÓ»¯¡£
ÔÚÔçÆÚµÄPHPºÍASPµÄʱ´ú£¬ÄǸöʱºòÄ£°åÒýÇæ»¹½ö½öÊǸöÉèÏ룬¿ª·¢ÈËÔ±ÃÇÔÚHTMLÖÐǶÈëËûÃǵÄÓ¦ÓôúÂë¡£ÎÒÃǾ³£¿ÉÒÔ¿´µ½ÏÂÃæÕâÖֽű¾Ç¶ÈëµÄд·¨£º
<script> <?php if ($login == true){ ?> alert("Welcome"); <?php } ?> </script> |
»òÕ߸üÔã¸â£º
<script> var users_deleted = []; <?php $arr_ids = array(1,2,3,4); foreach($arr_ids as $value){ ?> users_deleted.push("<php>"); <?php } ?> </script> |
¶ÔÓÚÐÂÊÖÀ´Ëµ£¬ºÜÈÝÒ×±»²»Í¬ÓïÑÔÖ®¼äµÄÓ÷¨¶ø»ìÏý£¬·¸ÏÂһЩºÜµäÐ͵ĴíÎ󣬱ÈÈçforºÍforeach¡£¸üΪ²»Ë¬µÄÊÇ£¬ÒÔÕâÑùµÄ·½Ê½À´Ð´´úÂ룬ʹµÃ·þÎñÆ÷¶ËºÍ¿Í»§¶ËºÜÄÑÒԷdz£ºÍгµÄ·½Ê½´¦ÀíÏàͬµÄÊý¾Ý½á¹¹£¬¼´Ê¹ÊǽñÌìÒ²ÊÇÈç´Ë£¨µ±È»³ý·ÇÄãµÄ¿ª·¢ÍŶÓÓÐרְµÄǰ¶ËºÍºó¶Ë¹¤³Ìʦ
¡ª µ«¼´Ê¹ËûÃÇÖ®¼äÄܹ»¹²ÏíÐÅÏ¢£¬µ«ÈÔÈ»²»Äܽö½ö»ùÓÚ¶Ô·½µÄ´úÂë½øÐкÏ×÷£©¡£
<?php $arr = array("apples", "bananas", "oranges", "strawberries"), $obj = array(); $i = 10; foreach($arr as $fruit){ $obj[$fruit] = $i; $i += 10; } echo json_encode(obj); ?> <script> $.ajax({ url:"/json.php", success: function(data){ var x; for(x in data){ alert("fruit:" + x + " points:" + data[x]); } } }); </script> |
×î³õ£¬¶ÔÓÚͳһʹÓÃÒ»ÖÖ±à³ÌÓïÑԵij¢ÊÔÊÇʹÓúǫ́µÄÓïÑÔ±àд¿Í»§¶ËµÄ×é¼þ£¬È»ºó±àÒë³ÉJavaScript¡£µ«ÕâÖÖ·½Ê½²¢Ã»ÓÐÈçÆÚÍûµÄÒ»ÑùºÜºÃµØ¹¤×÷£¬Ðí¶àÏà¹ØµÄÏîÄ¿¶¼Ê§°ÜÁË£¨±ÈÈç±»ASP
MVCÈ¡´úÁ˵ÄASP.NET Web forms£¬ ÓÖ±ÈÈçÕýÔÚÖð²½±»PolymerÈ¡´úµÄGWT£©¡£µ±È»ÕâЩÏë·¨¶¼ÊÇΰ´óµÄ£¬´Ó±¾ÖÊÉϽ²£¬¶¼ÊÇÏëÔÚ·þÎñÆ÷¶ËºÍ¿Í»§¶ËʹÓÃͬһÖÖÓïÑÔ£¬ÈÃÎÒÃÇ¿ÉÒÔÖØÓÃһЩ×é¼þºÍ×ÊÔ´£¨×¢ÒâÕâÀïµÄ¹Ø¼ü´Ê£º×ÊÔ´£©¡£
×îÖյóöµÄ´ð°¸ºÜ¼òµ¥£º½«JavaScript·Åµ½·þÎñ¶Ë
ÆäʵJavaScriptµ®ÉúÖ®³õÊÇÔÚÍø¾°¹«Ë¾µÄÆóÒµ¼°·þÎñÆ÷µÄ·þÎñ¶Ë£¬Ö»Êǵ±Ê±Ëü»¹Ã»ÓÐÍêȫ׼±¸ºÃ¡£¾¹ýÊýÄêµÄÄ¥Á¶ºÍ´íʧ£¬×îÖÕNode.js³öÏÖÁË£¬Ëü²»½ö½«JavaScript·Åµ½ÁË·þÎñÆ÷¶Ë£¬Í¬Ê±Ò²ÍƹãÁË·Ç×èÈûʽ±à³Ì£¨non-blocking
programming£©µÄ˼Ï룬ÕâÖÖ˼ÏëÀ´×ÔÓÚnginxµÄÊÀ½ç¡£¸ÐлNodeµÄ´´Ê¼ÕßÃÇnginxµÄ¼¼Êõ±³¾°£¬²¢ÇÒ¼ÌÐø£¨´ÏÃ÷µØ£©±£³ÖÁËËüµÄ¼òµ¥ÐÔ£¬Ò²¸ÐлJavaScriptÌìÉúµÄʼþÂÖѯ»úÖÆ¡£
£¨Ò»¾ä»°¸ÅÀ¨£¬·Ç×èÈûʽ±à³ÌÄ¿µÄÔÚÓÚ½«ÏûºÄʱ¼äµÄÈÎÎñ·Åµ½Ò»±ß£¬Í¨¹ýÖ¸¶¨ÔÚÕâЩÈÎÎñ½áÊøÊ±ÐèÒª×öµÄ²Ù×÷£¬ÕâÑù¿ÉÒÔÔÚͬһʱ¿ÌÈô¦ÀíÆ÷È¥´¦ÀíÆäËûµÄÇëÇó¡££©
Node.jsÓÀ¾ÃÐԵظıäÁËÎÒÃÇ´¦ÀíI/O·ÃÎʵķ½Ê½¡£×÷ΪWeb¿ª·¢Õߣ¬ÎÒÃǹýȥһֱʹÓÃÈçϵķ½Ê½·ÃÎÊÊý¾Ý¿â£¨I/O£©:
var resultset = db.query("SELECT * FROM 'table'"); drawTable(resultset); |
ÕâÀïµÄµÚÒ»ÐдúÂë±¾ÖÊÉÏÒѾ×èÈûÁËÄãµÄ´úÂ룬ÒòΪÄãµÄ´úÂëÍ£Ö¹ÏÂÀ´µÈ´ýÊý¾Ý¿âÇý¶¯·µ»ØÒ»¸ö½á¹û¼¯£¨resultset£©¡£¶øÓë´Ëͬʱ£¬ÄãµÄƽ̨¼Ü¹¹Æäʵ¸øÄãÌṩÁ˲¢·¢µÄ·½·¨£¬Í¨³£ÊÇͨ¹ýỊ̈߳¨threads£©ºÍÅÉÉú£¨forks£©¡£
ÔÚNode.jsºÍ·Ç×èÈûʽ±à³ÌµÄ°ïÖúÏ£¬ÎÒÃÇ¿ÉÒÔ¸ü¶àµÄ¿ØÖÆÎÒÃdzÌÐòµÄÖ´ÐÐÁ÷¡£ÏÖÔÚ£¨¾¡¹ÜÔÚÊý¾Ý¿âI/OÇý¶¯Æ÷µÄ±³ºó¿ÉÄÜÒѾÓв¢ÐÐÖ´ÐУ©£¬Äã¿ÉÒÔ¶¨ÒåÄãµÄ³ÌÐòÔÚI/O²Ù×÷ÆÚ¼ä²¢ÐÐ×öµÄÊÂÇ飬ÒÔ¼°ÔÚ½ÓÊÕµ½½á¹û¼¯Ö®ºó×öµÄ²Ù×÷¡£
db.query("SELECT * FROM 'table'", function(resultset){ drawTable(resultset); }); doSomeThingElse(); |
ÉÏÃæµÄ´úÂëÆ¬¶ÎÖУ¬ÎÒÃǶ¨ÒåÁËÁ½¸ö³ÌÐòÁ÷£ºµÚÒ»¸öÔÚÎÒÃÇ·¢³öÊý¾Ý¿â²éѯ֮ºóÖ´ÐеIJÙ×÷£¬µÚ¶þ¸öÊÇÒԻص÷µÄ·½Ê½ÔÚÎÒÃǽÓÊÕµ½½á¹û¼¯Ö®ºó×öµÄ²Ù×÷¡£ÕâÊÇÒ»¸ö·Ç³£ÓÅÑŲ¢ÇÒÇ¿´óµÄ´¦Àí²¢·¢µÄ·½Ê½¡£ÕýÈçËûÃÇËù˵µÄ£¬¡°Ò»Çж¼ÔÚ²¢ÐÐÖ´ÐСª¡ª³ýÁËÄãµÄ´úÂë¡££¨Evetything
runs in parallel ¡ª except your code.£©¡±ÕâÑù£¬ÄãµÄ´úÂë»á¸üÒ×д£¬Óиü¸ßµÄ¿É¶ÁÐÔ£¬ÈÝÒ×Àí½â£¬Ò²±ãÓÚά»¤£¬ÕâЩ¶¼»ùÓÚÄãÕÒ»ØÁ˶ԳÌÐòÁ÷µÄ¿ØÖÆ¡£
ÕâЩ¹ÛµãÔç¾Í²»ÊǺÜеĹ۵㣬ÄÇΪʲôËûÃÇËæ×ÅNode.js±äµÃÈç´ËÁ÷ÐÐÆðÀ´¡£ºÜ¼òµ¥£º·Ç×èÈûʽ±à³Ì¿ÉÒÔÓжàÖØÊµÏֵķ½Ê½¡£µ«¿ÉÄÜ×î¼òµ¥µÄ¾ÍÊÇʹÓûص÷ºÍʼþÂÖѯ¡£ÔÚ´ó¶àÊýÓÚÓïÑÔÀ×öµ½Õâµã²¢²»ÊÇÒ»¸ö¼òµ¥µÄÊÂÇé¡£»Øµ÷»úÖÆÔÚÆäËûµÄһЩÓÚÓïÑÔÀïÊÇÒ»¸ö±È½Ï³£¼ûµÄ¹¦ÄÜ£¬µ«ÊÇʼþÂÖѯȴ²»ÊÇ¡£Äã»á¾³£·¢ÏÖ×Ô¼º»¹ÐèÒªÔÚһЩÀ©Õ¹¿âÉÏ×öÕõÔú£¨±ÈÈ磬PythonÖÐʹÓÃTornado£©¡£
µ«ÊÇÔÚJavaScriptÖУ¬»Øµ÷»úÖÆÒѾ±»ÄÚ½¨ÔÚÓïÑÔÖУ¬ ʼþÂÖѯҲÊÇÈç´Ë¡£¶ø¶ÔJavaScriptÉÔÓÐÁ˽âµÄ³ÌÐòÔ±¶ÔËüÃÇÒ²·Ç³£ÊìϤ£¨»òÕßÖÁÉÙʹÓùýËüÃÇ£¬¼´Ê¹ËûÃÇÓпÉÄܲ¢²»ÍêÈ«Àí½âʲôÊÇʼþÂÖѯ£©¡£Í»È»Ö®¼ä£¬µØÇòÉÏËùÓеĴ´Òµ¹«Ë¾¶¼¿ÉÒÔÔÚ¿Í»§¶ËºÍ·þÎñÆ÷¶ËÖØÓÿª·¢ÈËÔ±£¨»òÕß×ÊÔ´£©£¬½â¾öÁË¡°ÐèÒªPython´óʦ£¨Python
Guru Needed£©¡±µÄÕÐÆ¸·¢²¼ÎÊÌâ¡£
Òò´Ë£¬ÏÖÔÚÎÒÃÇÓÐÁËÒ»¸ö·¢Õ¹Ñ¸ËÙµÄÆ½Ì¨£¨¸ÐлÓÚ·Ç×èÈûʽ±à³Ì£©£¬ºÍÒ»¸ö·Ç³£Ò×ÓÚʹÓõÄÓïÑÔ£¨¸ÐлJavaScript£©¡£µ«ÊÇÕâ¾Í×ã¹»ÁËÂð£¿ËüÊǿɳÖÐøµÄÂð£¿ÎÒÈ·ÐÅ£¬JavaScriptÔÚ½«À´»áÓÐÒ»¸ö·Ç³£ÖØÒªµÄµØÎ»¡£ÏÂÃæÎÒÀ´¸æËßÄãΪʲô¡£
º¯Êýʽ±à³Ì
JavaScriptÊǵÚÒ»¸ö½«º¯Êýʽ·¶Ê½´ø¸øÃñÖÚµÄÓïÑÔ£¨µ±È»£¬LispµÚÒ»¸ö³öÏÖ£¬µ«ÊÇ´ó¶àÊýµÄ³ÌÐòÔ±¶¼Ã»ÓÐʹÓÃËü¿ª·¢¹ýÒ»¸ö¿ÉÒÔ×÷Ϊ²úÆ·µÄÓ¦Óã©¡£LispºÍSelf£¬ÕâÁ½¸öÉîÉîÓ°ÏìÁËJavaScriptµÄÓïÑÔ£¬³äÂúÁË´´ÐµÄÀíÄËüÃǽâ·ÅÁËÎÒÃǵÄ˼Ï룬ȥÍÚ¾òеļ¼Êõ£¬Ä£Ê½ºÍ¹æ·¶¡£ÕâЩ¶¼ÑÓÐøµ½ÁËJavaScriptÉÏ¡£¿´Ò»ÏÂmondas,
Church number, »òÕßÉõÖÁ£¨×÷Ϊ¸üÓÐʵ¼ùÐÔµÄÀý×Ó£©UnderscoreµÄCollections
functions£¬ÕâЩ¿ÉÒÔ½ÚÔ¼ÄãÒ»ÐÐÓÖÒ»ÐеĴúÂë¡£
¶¯Ì¬¶ÔÏóÒÔ¼°ÔÐͼ̳Ð
ûÓÐÀࣨClasses£©£¬Ò²Ã»ÓÐÎÞÇîÎÞ¾¡µÄÀà²ã´Î½á¹¹µÄÃæÏò¶ÔÏó£¨Object-oriented£©±à³ÌÊÇÌṩÁ˸ü¿ìËٵıà³ÌÌåÑ顪¡ªÖ»Òª´´½¨¶ÔÏó£¬Ìí¼Ó·½·¨È»ºóʹÓÃËûÃÇ¡£¸üÖØÒªµÄÊÇ£¬Ëü´ó´ó¼õÉÙÁËά»¤Ê±Öع¹µÄ³É±¾£¬ÒòΪËüÔÊÐí³ÌÐòÔ±Ö±½ÓÐ޸ĶÔÏóµÄʵÀý£¬¶ø²»ÐèÒªÐÞ¸ÄÀà¡£ÕâÖÖËٶȺÍÁé»îµÄ·½Ê½Îª¿ìËÙ¿ª·¢ÆÌƽÁ˵À·¡£
JavaScript¾ÍÊÇ»¥ÁªÍø
JavaScriptÊÇÒò»¥ÁªÍø¶øÉúµÄ¡£Ëü´ÓÒ»¿ªÊ¼¾Í³öÏÖÁË£¬²¢ÇÒ°éËæµ½ÏÖÔÚ¡£ÈκÎÏëÒª´Ý»ÙËüµÄ³¢ÊÔ¶¼ÒÔʧ°Ü¶ø¸æÖÕ£¬±ÈÈçJava
AppletsµÄË¥Â䣬VBScript±»Î¢ÈíµÄTypeScript£¨Ëü×îÖջᱻ±àÒë³ÉJavaScript£©ËùÈ¡´ú£¬ÒÔ¼°FlashÔÚÊÖ»úÊг¡ÒÔ¼°HTML5ÉϵÄÒ»°ÜÍ¿µØ¡£Èç¹ûÏë²»ÆÆ»µ³ÉǧÉÏÍò¸öWebÒ³Ãæ¶øÈ¡´úJavaScriptÊDz»¿ÉÄܵģ¬ËùÒÔÎÒÃǽÓÏÂÀ´µÄÄ¿±êÓ¦¸ÃÊÇÌá¸ßºÍÍêÉÆËü¡£Õâ¸ö¹¤×÷£¬Ã»ÓÐ˱ÈECMAµÄTechnical
Committee 39¸üÊʺÏÁË¡£
µ±È»£¬JavaScriptµÄÌæ´úÕßÃÇÿÌì¶¼ÔÚµ®Éú£¬±ÈÈçCoffeeScript£¬TypeScript£¬ÒÔ¼°³ÉǧÉÏÍòÄܱ»±àÒë³ÉJavaScriptµÄÓïÑÔ¡£ÕâÐ©Ìæ´úÕßÃÇÔÚ¿ª·¢¹ý³ÌÖÐÒ²ÐíÊÇÓÐÓõģ¨Í¨¹ýsource
maps£©£¬µ«ÊÇËûÃÇ×îÖÕ¶¼²»¿ÉÄܳɹ¦µØ´úÌæJavaScript£¬Á½¸öÖ÷ÒªÔÒò£ºËûÃǵÄÉçÇøÓÀÔ¶²»»á±ÈJavaScript¸ü´ó£¬ËûÃÇÖеÄÓÅÐãÌØÐԻᱻECMAScript£¨Ò²¾ÍÊÇJavaScript£©ËùÎüÊÕ¡£JavaScript²»ÊÇ»ã±àÓïÑÔ£¬ËüÊÇÒ»¸öÄãÄÜÀí½â´úÂëµÄ¸ß¼¶±à³ÌÓïÑÔ¡ª¡ªËùÒÔÄãÓ¦¸ÃÀí½âËü¡£
¶Ëµ½¶Ë£¨End-to-End£©JavaScript£ºNode.jsºÍMongoDB
ÎÒÃÇÒѾ½éÉÜÁËΪʲôҪʹÓÃJavaScript¡£½Ó×Å£¬ÎÒÃÇÀ´¿´¿´Ê¹ÓÃNode.jsºÍMongoDBµÄÀíÓÉ¡£
NODE.JS
Node.jsÊÇÒ»¸ö´î½¨¿ìËٺͿÉÀ©Õ¹µÄÍøÂçÓ¦ÓÃµÄÆ½Ì¨¡ª¡ªÕýÈçNode.jsÍøÕ¾ÉÏËù˵¡£µ«ÊÇNode.jsÔ¶²»Ö¹ÕâЩ£ºËüÊÇÈç½ñ×î»ðµÄJavaScriptÔËÐл·¾³£¬±»´óÁ¿µÄÓ¦ÓúͳÌÐò¿âËùʹÓ᪡ªÉõÖÁÊÇä¯ÀÀÆ÷µÄ¿â´úÂëÒ²ÔËÐÐÔÚNode.jsÉÏ¡£¸üÖØÒªµÄÊÇ£¬ÕâÖÖ·þÎñÆ÷¶ËµÄ¿ìËÙÖ´ÐÐÈóÌÐòÔ±¿ÉÒÔרעÓÚ¸ü¸´ÔÓµÄÎÊÌ⣬±ÈÈç×ö×ÔÈ»ÓïÑÔ´¦ÀíµÄNatural¡£¼´Ê¹Ä㲢ûÓмƻ®ÓÃNode.jsÀ´Ð´ÄãµÄ·þÎñÆ÷¶ËÓ¦Óã¬ÄãÒ²ÓпÉÄÜʹÓûùÓÚNode.jsµÄ¹¤¾ßÀ´¸Ä½øÄãµÄ¿ª·¢Á÷³Ì¡£¾ÙÀýÀ´Ëµ£ºÓÃBowerÀ´×öǰ¶Ë°üÒÀÀµ¹ÜÀí£¬Mocha×öµ¥Ôª²âÊÔ£¬Grunt×ö×Ô¶¯»¯´ò°ü£¬ÉõÖÁÓÃBrachets×öÈ«ÎÄ´úÂë±à¼¡£
Òò´Ë£¬Èç¹ûÄãÕý×¼±¸¿ª·¢·þÎñÆ÷¶Ë»î¿Í»§¶ËµÄJavaScriptÓ¦Óã¬Äã¾ÍÐèÒª¶ÔNode.js¸ü¼ÓÊìϤ£¬ÒòΪÄãÔÚÈÕ³£¹¤×÷ÖлáÐèÒªËû¡£ÓÐһЩºÜÓÐȤµÄ´úÌæµÄÑ¡Ôñ£¬µ«ÊÇËüÃÇÖеÄÈκÎÒ»¸öµÄÉçÇø¶¼²»¼°Node.jsµÄ10%¡£
MONGODB
MongoDBÊÇÒ»¸ö»ùÓÚÎĵµ£¨Document-based£©NoSQLÊý¾Ý¿â£¬ËüʹÓÃJavaScript×÷ΪËüµÄ²éѯÓïÑÔ£¨µ«ÊÇËü²»ÊÇÓÃJavaScriptдµÄ£©£¬ËüÍêÉÆÁËÎÒÃǶ˵½¶ËµÄJavaScriptƽ̨¡£µ«ÊÇÕâ¸ö²¢²»ÊÇÎÒÃÇÑ¡ÔñMonoDBµÄÖ÷ÒªÔÒò¡£
MongoDB ÊÇÎÞģʽµÄ£¨schema-less£©£¬ÔÊÐíÄãÒԷdz£Áé»îµÄ·½Ê½°Ñ¶ÔÏó³Ö¾Ã»¯£¬Òò´ËÄܹ»Ñ¸ËÙµÄÓ¦¶ÔÐèÇó±ä¸ü¡£´ËÍ⣬Ëü¾ßÓи߶ȿÉÀ©Õ¹ÐÔ£¬²¢ÇÒ»ùÓÚmap-reduce£¬ÈÃËü·Ç³£ÊʺÏÓÚ´óÊý¾ÝµÄÓ¦Óá£MongoDBÈç´ËÁé»î£¬ÒÔÖÁÓÚËü¼È¿ÉÒÔÓÃ×÷ÎÞģʽµÄÎĵµÊý¾Ý¿â£¬Ò²¿ÉÒÔÓÃ×÷¹ØÏµÊý¾Ý´æ´¢£¨¾¡¹ÜËüȱÉÙÊÂÎñ£¬Ö»ÄÜͨ¹ýÄ£ÄâÀ´ÊµÏÖ£©£¬ÉõÖÁÊÇÓÃÀ´»º´æ½á¹ûµÄ¼üÖµ¶Ô´æ´¢£¬¾ÍÏñMemcachedºÍRedis¡£
»ùÓÚExpressµÄ·þÎñÆ÷¶Ë×é¼þ»¯
·þÎñÆ÷¶ËµÄ×é¼þ»¯¿ª·¢Ò»Ö±²»ÊÇÒ»¼þÈÝÒ×µÄÊÇ¡£µ«ÊÇ Express£¨ºÍConnect£©´øÀ´ÁË¡°Öмä¼þ£¨middleware£©µÄ˼Ï롱¡£ÔÚÎÒ¿´À´£¬Öмä¼þÊÇ·þÎñÆ÷¶Ë¶¨Òå×é¼þ×îºÃµÄ·½Ê½¡£Èç¹ûÄãÏëÕÒ¸öÊìϤµÄģʽÀ´¶Ô±ÈÒ»ÏµĻ°£¬ÄÇËü·Ç³£½Ó½üÓڹܵÀºÍ¹ýÂËÆ÷£¨pipes
and filters£©¡£
»ù±¾Ë¼Ïë¾ÍÊǽ«ÄãµÄ×é¼þ×÷Ϊ¹ÜµÀµÄÒ»²¿·Ö¡£¹ÜµÀ´¦ÀíÒ»¸öÇëÇó£¨Ò²½ÐÊäÈ룩£¬Éú³ÉÒ»¸ö½á¹û£¨Ò²½ÐÊä³ö£©£¬µ«ÊÇÄãµÄ×é¼þ²¢²»¸ºÔðÕû¸öÏìÓ¦½á¹û¡£Ïà·´£¬ËüÖ»×öËüÐèÒª×öµÄÐ޸ģ¬È»ºó½«Î¯ÅɸøÏ¹ܵÀµÄÏÂÒ»½Úµã¡£µ±¹ÜµÀµÄ×îºóµÄ½Úµã´¦ÀíÍêÖ®ºó£¬Õâ¸ö½á¹ûÔÙ·µ»Ø¸ø¿Í»§¶Ë¡£
ÎÒÃdzÆÕâЩ¹ÜµÀµÄ½ÚµãΪÖмä¼þ¡£ºÜÃ÷ÏÔ£¬ÎÒÃÇ¿ÉÒÔ´´½¨Á½ÖÖÀàÐ͵ÄÖмä¼þ£º
ÖмäÐÍ£¨Intermediates£©
Ò»¸öÖмäÐͽÚÖмä¼þÀíÇëÇóºÍÏìÓ¦£¬µ«ÊÇËü²»¸ºÈ«È¨ÔðÕû¸öÏìÓ¦£¬¶øÊǼÌÐø½«ËüÃÇ·ÖÅɸøÏÂÒ»¸öÖмä¼þ¡£
ÖÕ½áÐÍ£¨Finals£©
Ò»¸ö½áÊøÐÍÖмä¼þ¸ºÔð×îÖÕµÄÏìÓ¦½á¹û¡£Ëü¶ÔÇëÇóºÍÏìÓ¦½øÐд¦Àí£¬Ö®ºó²»»á·ÖÅɸøÏÂÒ»¸öÖмä¼þ¡£µ«Êµ¼ùÖУ¬¼ÌÐø·ÖÅɸøÒ»¸öÖмä¼þ¿ÉÒÔ¸ø¼Ü¹¹´øÀ´¸ü¸ßµÄÁé»îÐÔ£¨±ÈÈ磬֮ºóÐèÒªÔö¼ÓÆäËûµÄÖмä¼þ£©£¬¼´Ê¹ÏÂÒ»¸öÖмä¼þ²¢²»´æÔÚ£¨ÕâÖÖÇé¿öÏ£¬½á¹û»áÖ±½Ó±»´«µÝµ½¿Í»§¶Ë£©¡£

ȡһ¸ö¾ßÌåµÄÀý×Ó£¬¼ÙÉè·þÎñÆ÷¶ËÓÐÒ»¸ö¡°Óû§¹ÜÀí¡±µÄ×é¼þ¡£¸ù¾ÝÖмä¼þµÄ·½Ê½£¬ÎÒÃÇ×îºÃÄÜÓÐÖÕ½áÐͺÍÖмäÐ͵ÄÖмä¼þ¡£¶ÔÓÚÖÕ½á½Úµã£¬ÎÒÃÇÒªÓд´½¨Óû§ºÍÁгöÓû§µÄ¹¦ÄÜ¡£µ«ÊÇÔÚÎÒÃÇ×öÕâЩ²Ù×÷֮ǰ£¬ÎÒÃÇÐèҪʹÓÃÖмä½ÚµãÀ´×öÈÏÖ¤£¨ÒòΪÎÒÃDz»Ï£ÍûûÓÐÈÏÖ¤¹ýµÄÇëÇóÄܽøÀ´£¬ÉõÖÁ´´½¨Óû§£©¡£Ò»µ©ÎÒÃÇ´´½¨ºÃÁËÕâЩÈÏÖ¤Öмä¼þ£¬µ±ÎÒÃÇÏëÒª°ÑÒ»¸öÔÏȲ»ÐèÒªÈÏÖ¤µÄ¹¦Äܸıä³ÉÈÏÖ¤¹¦ÄܵÄʱºò£¬ÎÒÃÇÖ»ÐèÒª½«Õâ¸öÖмä¼þ°²²åÔÚÏàÓ¦µÄλÖá£
µ¥Ò³Ã棨Single-Page£©Ó¦ÓÃ
µ±ÄãʹÓÃȫջʽJavaScriptµÄʱºò£¬¶àÊýÇé¿öÏÂÄã»áרע¿ª·¢µ¥Ò³ÃæÓ¦Óᣴó¶àÊýµÄWeb¿ª·¢ÕßÃǶ¼½û²»×¡²»Ö¹Ò»´ÎµØ³¢ÊÔ×Å×ÅÊÖÓÚµ¥Ò³ÃæÓ¦Óá£ÎÒÒѾ´´½¨Á˼¸¸ö£¨¶àÊýΪ¸öÈ˵ģ©£¬ÎÒÏàÐÅËûÃǾÍÊÇWebÓ¦ÓõÄδÀ´¡£ÄãÊÇ·ñÔÚÒÆ¶¯Á´½ÓÉ϶Աȹýµ¥Ò³ÃæÓ¦ÓúÍͨ³£µÄWebÓ¦Óã¿ËûÃÇÔÚÏìÓ¦ËٶȵIJî¾àÓÐÊýÊ®ÃëÖ®¶à¡£
£¨×¢Ò⣺ÓÐЩÈË¿ÉÄܲ»Í¬ÒâÎҵĹ۵㡣±ÈÈçTwitter£¬»Ø¹öÁËËûÃǵĵ¥Ò³ÃæÍ¾¾¶¡£Óë´Ëͬʱ£¬ºÜ¶à´óµÄÍøÕ¾ÕýÔÚ²½Èëµ¥Ò³ÃæÊ±´ú£¬±ÈÈçZendesk¡£ÎÒÒѾ¿´µ½×ã¹»µÄÖ¤¾ÝÖ¤Ã÷µ¥Ò³ÃæÓ¦ÓôøÀ´µÄºÃ´¦£¬²¢ÇÒ¶Ô´ËÉîÐŲ»ÒÉ¡£µ«ÊǾßÌ廹ÊÇÒòÇé¿ö¶øÒì¡££©
Èç¹ûµ¥Ò³ÃæÓ¦ÓÃÈç´ËÇ¿´ó£¬ÄÇΪʲô»¹ÊÇҪѡÔñÀÏÍÁµÄ·½Ê½À´´´½¨ÄãµÄÓ¦ÓÃÄØ£¿ÎÒ¾³£Ìýµ½µÄÒ»ÖÖÕùÂÛ¾ÍÊÇËûÃǵ£ÐÄSEO£¨Search
Engine Optimization£©¡£µ«ÊÇÈç¹ûÄã¶Ô´Ë×öÁËÕýÈ·µÄ´¦Àí£¬Õ⽫²»ÊÇÒ»¸öÎÊÌ⣺Äã¿ÉÒÔÓжàÖÖ½â¾ö·½Ê½£¬´ÓʹÓÃÎÞ½çÃæµÄä¯ÀÀÆ÷£¨headless
browser£©£¬±ÈÈçPhantomJS£¬ÔÚ¼ì²âµ½ÍøÂçÅÀ³æµÄʱºòäÖȾHTML£¬µ½Ê¹ÓÃһЩÏÖÓпò¼ÜÖ´ÐзþÎñÆ÷¶ËäÖȾ¡£
»ùÓÚBackbones.js£¬MarionetteºÍTwitter BootstrapµÄ¿Í»§¶ËMV*ģʽ
¹ØÓÚʹÓÃMV*¿ò¼Ü¿ª·¢µ¥Ò³ÃæÓ¦ÓÃÒѾÓÐÌ«¶àµÄÌÖÂÛÁË¡£¾¡¹ÜºÜÄÑÑ¡Ôñ£¬µ«ÊÇÎÒÏë˵ÅÅÃûǰÈýµÄÊÇBackbone.js,
EmberºÍAngularJS¡£
ÕâÈý¸ö¶¼ÊǷdz£±»ÍƳçµÄ£¬µ«ÄĸöÊÇ×îÊʺÏÄãµÄ£¿
²»ÐÒµÄÊÇ£¬ÎÒ±ØÐëµÃ³ÐÈÏÎÒÔÚAngularJSÉϵľÑéÓÐÏÞ£¬ËùÒÔÎҾͰÑËü·ÅÔÚÌÖÂÛ·¶Î§Ö®Íâ¡£ÄÇô£¬EmberºÍBackbone.js´ú±íÁ˽â¾öͬһÎÊÌâµÄÁ½ÖÖ²»Í¬·½Ê½¡£
Backbone.jsºÜС£¬µ«ÊÇÇ¡µ½ºÃ´¦µÄÌṩÁË´´½¨Ò»¸ö¼òµ¥µÄµ¥Ò³ÃæÓ¦ÓÃËùÐèÒªµÄ¹¦ÄÜ¡£ÁíÒ»·½Ã棬EmberÊÇÒ»¸ö´´½¨µ¥Ò³ÃæÓ¦ÓõÄÍêÕûÇÒרҵµÄ¿ò¼Ü¡£ËüÓиü¶àµÄ¸¨Öú¹¤¾ß£¬µ«ÊÇÒ²Óиü¼Ó¶¸Ç͵ÄѧϰÇúÏß¡££¨Äã¿ÉÒÔÔĶÁ¸ü¶à¹ØÓÚEmber.jsµÄÄÚÈÝ¡££©
»ùÓÚÄãµÄÓ¦ÓõĴóС£¬¿ÉÒÔ¼òµ¥µØÍ¨¹ý±È½Ï¡°ÐèÒªµÄ¹¦ÄÜ¡±Õ¼¡°¿ÉÓõŦÄÜ¡±µÄ±ÈÀýÀ´×ö³ö¾ö¶¨£¬Ëü»á¸øÄãºÜ´óµÄÌáʾ¡£
ÑùʽÉè¼ÆÒ²Í¬ÑùÊÇÒ»¸öÌôÕ½£¬µ«ÊÇÔٴΣ¬ÎÒÃÇÒ²¿ÉÒÔÁоٳöһЩ¿ÉÒÔÖúÎÒÃÇÒ»±ÛÖ®Á¦µÄ¿ò¼Ü¡£¶ÔÓÚCSS£¬Twitter
BootstrapÊÇÒ»¸ö·Ç³£ºÃµÄÑ¡Ôñ£¬ËüÌṩÁËÒ»Ì×ÍêÕûµÄÑùʽ£¬ËüÃÇ¿ÉÒÔÁ¢¼´Ê¹Óã¬Ò²·Ç³£±ãÓÚ×Ô¶¨Òå¡£
BootstrapÊÇʹÓÃLESSÓïÑÔ´´½¨µÄ£¬ËüÊÇ¿ªÔ´µÄ£¬ÎÒÃÇ¿ÉÒÔ¸ù¾ÝÎÒÃǵÄÐèÒªÀ´ÐÞ¸ÄËü¡£°éËæËüµÄ»¹ÓÐÒ»´ó¶ÑÓû§ÓѺõÄ×é¼þ£¬ËüÃÇÒ²Óзdz£ÍêÉÆµÄÎĵµ¡£´ËÍ⣬һ¸ö¶¨ÖÆ»¯Ä£Ê½ÈÃÄãºÜ·½±ãµØ´´½¨Äã×Ô¼ºµÄ¡£ºÁÎÞÒÉÎÊ£¬ËüÕýÊÇÕâ¸ö¹¤×÷ËùÐèÒªµÄÕýÈ·µÄ¹¤¾ß¡£
×î¼Ñʵ¼ù£ºGrunt£¬Mocha£¬Chai£¬RequireJS ºÍ CoverJS
×îºó£¬ÎÒÃǽ«¶¨ÒåһЩ×î¼Ñʵ¼ù£¬Í¬Ê±Ì¸Ì¸¸ÃÈçºÎʵÏÖºÍά»¤ËüÃÇ¡£¾ßÓдú±íÐԵģ¬ÎҵĽâ¾ö·½°¸£¬×îÖÕ¾Û½¹µ½¼¸¸ö¹¤¾ßÉÏ£¬ËûÃDZ¾Éí¶¼ÊÇ»ùÓÚNode.js¡£
MOCHA ºÍ CHAI
ÕâЩ¹¤¾ßÄܰïÖúÄãʹÓòâÊÔÇý¶¯¿ª·¢Ä£Ê½£¨test-driven development£©»òÕßÐÐΪÇý¶¯¿ª·¢Ä£Ê½£¨behavior-driven
development£©À´¸Ä½øÄãµÄ¿ª·¢Á÷³Ì£¬´´½¨Ò»Ð©»ù´¡¼Ü¹¹À´¹ÜÀíÄãµÄµ¥Ôª²âÊÔ£¬²¢ÇÒ×Ô¶¯ÔËÐÐÕâЩ²âÊÔ¡£
ÏÖÔÚÓдóÁ¿µÄJavaScriptµ¥Ôª²âÊÔ¿ò¼Ü£¬ÎªÊ²Ã´ÒªÓÃMocha£¿¼ò¶ÌµÄ»Ø´ð¾ÍÊÇËü¼´Áé»îÓÖÍêÉÆ¡£ÎÒÀ´½âÊÍһϣº
Óû§½çÃæ£¨Interfaces£©
Ò²ÐíÄãϰ¹ßÓÚ²âÊÔÇý¶¯µÄ³ÌÐò×éºÍµ¥Ôª²âÊԵĸÅÄÓÖ»òÐíÇãÏòÓÚÐÐΪÇý¶¯²âÊÔµÄʹÓÃdescribleºÍshouldÀ´¶¨ÒåÐÐΪ¶¨ÒåµÄÀíÄî¡£MochaÈÃÄã¿ÉÒÔͬʱʹÓÃÕâÁ½ÖÖ·½Ê½¡£
±¨±íÉú³ÉÆ÷£¨reporter£©
ÔËÐÐÄãµÄ²âÊÔ´úÂë»áÉú³É²âÊÔ½á¹ûµÄ±¨±í£¬Äã¿ÉÒÔʹÓø÷ʽ¸÷ÑùµÄreporterÀ´¸ñʽ»¯ÕâЩ½á¹û¡£¾ÙÀýÀ´Ëµ£¬Èç¹ûÄãÐèÒªÌṩһ¸ö³ÖÐø¼¯³É·þÎñÆ÷ÐÅÏ¢£¬Äã¿ÉÒÔÕÒµ½Ò»¸öreportÀ´×öÕâЩ¡£
ûÓÐÖ¸¶¨¶ÏÑԿ⣨Lack of an assertion library£©
Õ⼸ºõ²»ÊÇÒ»¸öÎÊÌ⣬Mocha¾ö¶¨ÈÃÄãÑ¡Ôñ×Ô¼ºÒªÊ¹ÓõĶÏÑԿ⣬´Ó¶ø¸øÄã¸ü¶àµÄÁé»îÐÔ¡£ÄãÓкܶàµÄÑ¡Ôñ£¬ÕâÕýÊÇChaiʩչÉíÊֵĵط½¡£
Chai ÊÇÒ»¸ö·Ç³£Áé»îµÄ¶ÏÑԿ⣬Ëü¿ÉÒÔÈÃÄãʹÓÃÈçÏÂÈýÖÐÖ÷Òª¶ÏÑÔ·½Ê½µÄÈκÎÒ»ÖÖ£º
assert
ÕâÊÇÀ´×ÔÀÏÅɲâÊÔÇý¶¯¿ª·¢µÄ¾µäµÄassert·½Ê½¡£±ÈÈ磺
assert.equal(variable, "value"); |
expect
ÕâÖÖÁ´Ê½µÄ¶ÏÑÔ·ç¸ñÔÚÐÐΪÇý¶¯¿ª·¢ÖÐ×îΪ³£¼û¡£±ÈÈ磺
expect(variable).to.equal("value"); |
should
ÕâÒ²ÊÇÓÃÔÚ²âÊÔÇý¶¯¿ª·¢ÖУ¬µ«ÊÇÎÒ¸üÍÆ¼öexpect£¬ÒòΪshould¾³£ÌýÆðÀ´±È½Ï·´¸´£¨±ÈÈ磬¶¨ÒåÒ»¸öÐÐΪ¹æ·¶£¬¡±it
(should do something¡)¡±£©¡£¾ÙÀý£º
variable.should.equal("value"); |
ChaiºÍMocha¿ÉÒÔÎ޷켯³É¡£Ê¹ÓÃÕâÁ½¸ö³ÌÐò¿â£¬Äã¿ÉÒÔʹÓòâÊÔÇý¶¯£¬ÐÐΪÇý¶¯»îÈκÎÏëµÃµ½µÄ·½Ê½À´Ð´ÄãµÄ²âÊÔ´úÂë¡£
GRUNT
GruntÊÇÄãÄܹ»×Ô¶¯»¯ÄãµÄbuildÈÎÎñ£¬°üº¬¼òµ¥µÄ¸´ÖÆÕ³ÌùºÍÎļþÆ´½Ó£¬Ä£°åÔ¤±àÒ룬styleÓïÑÔ£¨SASSºÍLESS£©±àÒ룬µ¥Ôª²âÊÔ£¨Ê¹ÓÃMocha£©£¬´úÂë¼ì²é£¬ÒÔ¼°´úÂë×îС»¯£¨±ÈÈ磬ʹÓÃUglifyJS»òÕßClosure
Compiler£©¡£Äã¿ÉÒÔÌí¼ÓÄã×Ô¼ºµÄ×Ô¶¯»¯ÈÎÎñµ½GruntÖлòÕßËÑË÷registry£¬ÄÇÀïÊý°Ù¸ö²å¼þ¿É¹©Ê¹Óã¨ÔÙ´ÎÌáÐÑ£¬Ñ¡ÔñʹÓÃÓÐÁ¼ºÃµÄÉçÇøÖ§³ÖµÄ¹¤¾ß£©¡£GruntÒ²¿ÉÒÔ¼à¿ØÄãµÄÎļþ£¬µ±·¢Éú¸ü¸Äʱ´¥·¢Ò»Ð©²Ù×÷¡£
REQUIREJS
RequireJS ÌýÆðÀ´ÊÇ»ùÓÚAMD APIµÄÁíÒ»ÖÖ¼ÓÔØÄ£¿éµÄ·½Ê½£¬µ«ÊÇÎÒ¸Ò±£Ö¤µØ¸æËßÄ㣬ËüÔ¶Ô¶²»Ö¹Õâ¸ö¹¦ÄÜ¡£Ê¹ÓÃRequireJS£¬Äã¿ÉÒÔ¶¨ÒåÄãµÄÄ£¿éÖ®¼äµÄÒÀÀµºÍ²ã´Î½á¹¹£¬ÈÃRequireJS¿â°ïÄãÀ´¼ÓÔØËûÃÇ¡£Ëü»¹ÌṩÁËÒ»Öַdz£¼ò±ãµÄ·½Ê½À´±ÜÃâÈ«¾Ö±äÁ¿ÎÛȾ£¬Í¨¹ýÔÚº¯ÊýÌåÖж¨ÒåÄãµÄÄ£¿é¡£ÕâÈÃÄ£¿é¿ÉÒÔÖØÓ㬲»ÏñÃüÃû¿Õ¼äÄ£¿é£¨namespaced
modules£©¡£ÊÔÏëһϣºÈç¹û¶¨ÒåÁËÒ»¸öÀàËÆÓÚDemoapp.helloWorlModuleµÄÄ£¿é£¬ÄãÏë°ÑËû¸Ä³ÉFirstapp.helloWorldModule£¬ÄÇôÄãÐèÒª°ÑËùÓÐÒýÓõ½DemoappÃüÃû¿Õ¼äµÄµØ·½¶¼×öÐ޸쬲ÅÄÜÈÃËü±äµÃ¿ÉÒÆÖ²¡£
RequireJS»¹ÄÜÈÃÄãÓµ±§ÒÀÀµ×¢Èëģʽ¡£¼ÙÉèÄãÓÐÒ»¸öÄ£¿éÐèÒªÓõ½Ö÷Ó¦ÓöÔÏ󣨵¥Àý£©µÄÒ»¸öʵÀý¡£Í¨¹ýʹÓÃRequireJS£¬ÄãÒâʶµ½Äã²»ÐèҪʹÓÃÈ«¾Ö±äÁ¿À´´æ´¢Ëü£¬ÄãÒ²²»ÄÜʹÓÃÒ»¸öʵÀý×÷ΪRequireJSµÄÒÀÀµ¡£ËùÒÔ£¬ÄãÐèÒªÔÚÄãµÄÄ£¿é¹¹ÔìÆ÷ÖмÓÔØÕâ¸öÒÀÀµ¡£ÈÃÎÒÃÇ¿´Ò»¸öÀý×Ó£º
ÔÚmain.js:
define( ["App","module"], function(App, Module){ var app = new App(); var module = new Module({ app: app }) return app; } ); |
ÔÚmodule.js
define([], function(){ var module = function(options){ this.app = options.app; }; module.prototype.useApp = function(){ this.app.performAction(); }; return module } ); |
×¢Ò⣬ÎÒÃDz»ÄÜÔÚmoduleµÄ¶¨ÒåÖмÓÈë¶Ômain.jsµÄÒÀÀµ£¬·ñÔòÎÒÃǻᴴ½¨³öÒ»¸öÑ»·ÒýÓá£
COVERJS
´úÂ븲¸ÇÂÊ£¨Code coverage£©ÊÇÄã²âÊÔµÄÒ»¸ö¶ÈÁ¿±ê×¼¡£ÕýÈçËüµÄÃû×ÖËùʾ£¬ËüÄܸæËßÄ㵱ǰµÄ²âÊÔ¼¯¸²¸ÇÁËÄã´úÂëµÄ¶àÉÙ²¿·Ö¡£CoverJSͨ¹ý¼ì²âÄã´úÂëÖеÄÓï¾ä£¨¶ø²»ÊÇÏñJSCoverageÄÇÑù¿´´úÂëÐУ©²¢Éú³ÉÒ»¸ö¼ì²â¹ýµÄ°æ±¾µÄ´úÂëÀ´²âÁ¿ÄãµÄ²âÊÔ´úÂëµÄ¸²¸ÇÂÊ¡£ËüÒ²¿ÉÒÔÖ§³Ö¶Ô³ÖÐø¼¯³É·þÎñÆ÷Ìṩ³ÖÐø±¨±íÉú³É¡£
×ܽá
ȫջʽJavaScript²¢²»Äܽâ¾öËùÓеÄÎÊÌâ¡£µ«ÊÇËüµÄÉçÇøºÍ¼¼Êõ»á´øÁìÄã×ߺܳ¤Ò»¶Î·¡£Ê¹ÓÃJavaScript£¬Äã¿ÉÒÔ´´½¨»ùÓÚͳһµÄÓïÑԵĿÉÀ©Õ¹µÄ£¬¿Éά»¤µÄÓ¦Ó᣺ÁÎÞÒÉÎÊ£¬ÕâÊǾø¶ÔÖµµÃÎÒÃǹØ×¢µÄ¡£
|