¾µä¼ÆËã»ú¿ÆÑ§µÄÒ»¸öÎÊÌâÊÇ£¬Êý¾ÝÓ¦µ±´æ·ÅÔÚʲôµØ·½£¬ÒÔʵÏÖ×î¼ÑµÄ¶ÁдЧÂÊ¡£Êý¾Ý´æ´¢ÊÇ·ñµÃµ±£¬¹ØÏµµ½´úÂëÔËÐÐÆÚ¼äÊý¾Ý±»¼ìË÷µ½µÄËÙ¶È¡£ÔÚJavascriptÖУ¬´ËÎÊÌâÏà¶Ô¼òµ¥£¬ÒòΪÊý¾Ý±íÏÖ·½Ê½Ö»ÓÐÉÙÁ¿·½Ê½¿É¹©Ñ¡Ôñ¡£ÔÚJavascriptÖУ¬ÓÐËÄÖÖ»ù±¾µÄÊý¾Ý·ÃÎÊλÖãº
1.Literal values Ö±½ÓÁ¿
Ö±½ÓÁ¿½ö½ö´ú±í×Ô¼º£¬¶ø²»´æ´¢ÓÚÌØ¶¨µÄλÖá£
JavascriptµÄÖ±½ÓÁ¿°üÀ¨£º×Ö·û´®(strings)¡¢Êý×Ö(numbers)¡¢²¼¶ûÖµ(booleans)¡¢¶ÔÏó(objects)¡¢Êý×é(arrays)¡¢º¯Êý(functions)¡¢ÕýÔò±í´ïʽ(regular
expressions)£¬¾ßÓÐÌØÊâÒâÒåµÄ¿ÕÖµ(null)£¬ÒÔ¼°Î´¶¨Òå(undefined)¡£
2.Variables ±äÁ¿
¿ª·¢ÈËÔ±ÓÃvar¹Ø¼ü×Ö´´½¨ÓÃÓÚ´æ´¢Êý¾ÝÖµ¡£
3.Array items Êý×éÏî
¾ßÓÐÊý×ÖË÷Òý£¬´æ´¢Ò»¸öJavascriptÊý×é¶ÔÏó¡£
4.Object members ¶ÔÏó³ÉÔ±
¾ßÓÐ×Ö·û´®Ë÷Òý£¬´æ´¢Ò»¸öJavascript¶ÔÏó¡£
ÿһÖÖÊý¾Ý´æ´¢Î»Öö¼¾ßÓÐÌØ¶¨µÄ¶Áд²Ù×÷¸ºµ£¡£ÔÚ´ó¶àÊýÇé¿öÏ£¬¶ÔÒ»¸öÖ±½ÓÁ¿ºÍÒ»¸ö¾Ö²¿±äÁ¿µÄÊý¾Ý·ÃÎʵÄÐÔÄܲîÒìÊÇ΢²»×ãµÀµÄ¡£¾ßÌå¶øÑÔ£¬·ÃÎÊÊý×éÏîºÍ¶ÔÏó³ÉÔ±µÄ´ú¼ÛÒª¸ßһЩ£¬¾ßÌå¸ß¶àÉÙ£¬ºÜ´ó³Ì¶ÈÉÏÈ¡¾öÓÚä¯ÀÀÆ÷¡£Ò»°ãµÄ½¨ÒéÊÇ£¬Èç¹û¹ØÐÄÔËÐÐËÙ¶È£¬ÄÇô¾¡Á¿Ê¹ÓÃÖ±½ÓÁ¿ºÍ¾Ö²¿±äÁ¿£¬ÏÞÖÆÊý×éÏîºÍ¶ÔÏó³ÉÔ±µÄʹÓá£Îª´Ë£¬ÓÐÈçϼ¸ÖÖģʽ£¬ÓÃÓÚ±ÜÃâ²¢ÓÅ»¯ÎÒÃǵĴúÂ룺
Managing Scope ¹ÜÀí×÷ÓÃÓò
×÷ÓÃÓò¸ÅÄîÊÇÀí½âJavascriptµÄ¹Ø¼ü£¬ÎÞÂÛÊÇ´ÓÐÔÄÜ»¹Êǹ¦ÄܵĽǶȶøÑÔ£¬×÷ÓÃÓò¶ÔJavascriptÓÐמ޴óÓ°Ïì¡£ÒªÀí½âÔËÐÐËÙ¶ÈÓë×÷ÓÃÓòµÄ¹ØÏµ£¬Ê×ÏÈÒªÀí½â×÷ÓÃÓòµÄ¹¤×÷ÔÀí¡£
Scope Chains and Identifier Resolution
×÷ÓÃÓòÁ´ºÍ±êʶ·û½âÎö
ÿһ¸öJavascriptº¯Êý¶¼±»±íʾΪ¶ÔÏó£¬ËüÊÇÒ»¸öº¯ÊýʵÀý¡£Ëü°üº¬ÎÒÃDZà³Ì¶¨ÒåµÄ¿É·ÃÎÊÊôÐÔ£¬ºÍһϵÁв»Äܱ»³ÌÐò·ÃÎÊ£¬½ö¹©JavascriptÒýÇæÊ¹ÓõÄÄÚ²¿ÊôÐÔ£¬ÆäÖÐÒ»¸öÄÚ²¿ÊôÐÔÊÇ[[Scope]]£¬ÓÉECMA-262±ê×¼µÚÈý°æ¶¨Òå¡£
ÄÚ²¿[[Scope]]ÊôÐÔ°üº¬Ò»¸öº¯Êý±»´´½¨µÄ×÷ÓÃÓòÖжÔÏóµÄ¼¯ºÏ¡£´Ë¼¯ºÏ±»³ÆÎªº¯ÊýµÄ×÷ÓÃÓòÁ´£¬Ëü¾ö¶¨ÄÄЩÊý¾Ý¿ÉÒÔÓɺ¯Êý·ÃÎÊ¡£´Ëº¯ÊýÖÐ×÷ÓÃÓòÁ´ÖÐÿ¸ö¶ÔÏó±»³ÆÎªÒ»¸ö¿É±ä¶ÔÏó£¬ÒÔ¡°¼üÖµ¶Ô¡±±íʾ¡£µ±Ò»¸öº¯Êý´´½¨ÒÔºó£¬ËüµÄ×÷ÓÃÓòÁ´±»Ìî³äÒÔ¶ÔÏó£¬ÕâЩ¶ÔÏó´ú±í´´½¨´Ëº¯ÊýµÄ»·¾³ÖпɷÃÎʵÄÊý¾Ý£º
function add(num1, num2){ ¡¡¡¡var sum = num1 + num2; ¡¡ return sum; }
|
µ±add()º¯Êý´´½¨ÒÔºó£¬ËüµÄ×÷ÓÃÓòÁ´ÖÐÌîÈëÁËÒ»¸öµ¥¶À¿É±ä¶ÔÏ󣬴ËÈ«¾Ö¶ÔÏó´ú±íÁËËùÓÐÈ«¾Ö·¶Î§¶¨ÒåµÄ±äÁ¿¡£´ËÈ«¾Ö¶ÔÏó°üº¬ÖîÈç´°¿Ú¡¢ä¯ÀÀÆ÷ºÍÎĵµÖ®ÀàµÄ·ÃÎʽӿڡ£ÈçÏÂͼËùʾ£º£¨add()º¯ÊýµÄ×÷ÓÃÓòÁ´£¬×¢ÒâÕâÀïÖ»»³öÈ«¾Ö±äÁ¿ÖкÜÉÙµÄÒ»²¿·Ö£©

addº¯ÊýµÄ×÷ÓÃÓòÁ´½«»áÔÚÔËÐÐʱÓõ½£¬¼ÙÉèÔËÐÐÁËÈçÏ´úÂ룺
ÔËÐдËaddº¯Êýʱ»á½¨Á¢Ò»¸öÄÚ²¿¶ÔÏ󣬳Æ×÷¡°ÔËÐÐÆÚÉÏÏÂÎÄ¡±(execution context)£¬Ò»¸öÔËÐÐÆÚÉÏÏÂÎ͍ÒåÁËÒ»¸öº¯ÊýÔËÐÐʱµÄ»·¾³¡£ÇÒ¶ÔÓÚµ¥¶ÀµÄÿ´ÎÔËÐжøÑÔ£¬Ã¿¸öÔËÐÐÆÚÉÏÏÂÎͼÊǶÀÁ¢µÄ£¬¶à´Îµ÷Óþͻá²úÉú¶à´Ë´´½¨¡£¶øµ±º¯ÊýÖ´ÐÐÍê±Ï£¬ÔËÐÐÆÚÉÏÏÂÎı»Ïú»Ù¡£
Ò»¸öÔËÐÐÆÚÉÏÏÂÎÄÓÐ×Ô¼ºµÄ×÷ÓÃÓòÁ´£¬ÓÃÓÚ½âÎö±êʶ·û¡£µ±ÔËÐÐÆÚÉÏÏÂÎı»´´½¨µÄʱ£¬ËüµÄ×÷ÓÃÓò±»³õʼ»¯£¬Á¬Í¬ÔËÐк¯ÊýµÄ×÷ÓÃÓòÁ´[[Scope]]ÊôÐÔËù°üº¬µÄ¶ÔÏó¡£ÕâЩֵ°´ÕÕËüÃdzöÏÖÔÚº¯ÊýÖеÄ˳Ðò£¬±»¸´ÖƵ½ÔËÐÐÆÚÉÏÏÂÎĵÄ×÷ÓÃÓòÁ´ÖС£ÕâÏ×÷Ò»µ©Ö´ÐÐÍê±Ï£¬Ò»¸ö±»³Æ×÷¡°¼¤»î¶ÔÏó¡±µÄжÔÏó¾ÍλÔËÐÐÆÚÉÏÏÂÎÄ´´½¨ºÃÁË¡£´Ë¼¤»î¶ÔÏó×÷Ϊº¯ÊýÖ´ÐÐÆÚÒ»¸ö¿É±ä¶ÔÏ󣬰üº¬ÁË·ÃÎÊËùÓоֲ¿±äÁ¿£¬ÃüÃû²ÎÊý£¬²ÎÊý¼¯ºÏºÍthisµÄ½Ó¿Ú¡£È»ºó£¬´Ë¶ÔÏó±»ÍÆÈëµ½×÷ÓÃÓòÁ´µÄ×îǰ¶Ë¡£µ±×÷ÓÃÓòÁ´±»Ïú»Ùʱ£¬¼¤»î¶ÔÏóҲһͬ±»Ïú»Ù¡£ÈçÏÂËùʾ£º£¨ÔËÐÐadd()ʱµÄ×÷ÓÃÓòÁ´£©

ÔÚº¯ÊýÔËÐеĹý³ÌÖУ¬Ã¿Óöµ½Ò»¸ö±äÁ¿£¬¾ÍÒª½øÐбêʶ·ûʶ±ð¡£±êʶ·ûʶ±ðÕâ¸ö¹ý³ÌÒª¾ö¶¨´ÓÄÄÀï»ñµÃÊý¾Ý»òÕß´æÈ¡Êý¾Ý¡£´Ë¹ý³ÌËÑË÷ÔËÐÐÆÚÉÏÏÂÎĵÄ×÷ÓÃÓòÁ´£¬²éÕÒͬÃûµÄ±êʶ·û¡£ËÑË÷¹¤×÷´ÓÔËÐк¯ÊýµÄ¼¤»îÄ¿±êµÄ×÷ÓÃÓòǰ¶Ë¿ªÊ¼¡£Èç¹ûÕÒµ½ÁË£¬¾ÍʹÓÃÕâ¸ö¾ßÓÐÖ¸¶¨±êʶ·ûµÄ±äÁ¿£»Èç¹ûûÕÒµ½£¬ËÑË÷¹¤×÷½«½øÈë×÷ÓÃÓòÁ´µÄÏÂÒ»¸ö¶ÔÏ󣬴˹ý³Ì³ÖÐøÔËÐУ¬Ö±µ½±êʶ·û±»ÕÒµ½»òÕßûÓиü¶à¿ÉÓöÔÏó¿ÉÓÃÓÚËÑË÷£¬ÕâÖÖÇé¿öÊÓΪ±êʶ·û䶨Òå¡£ÕýÊÇÕâÖÖËÑË÷¹ý³ÌÓ°ÏìÁËÐÔÄÜ¡£
Identifier Resolution Performance ±êʶ·ûʶ±ðÐÔÄÜ
±êʶ·ûʶ±ðÊǺÄÄܵġ£
ÔÚÔËÐÐÆÚÉÏÏÂÎĵÄ×÷ÓÃÓòÁ´ÖУ¬Ò»¸ö±êʶ·ûËù´¦µÄλÖÃÔ½ÉËüµÄ¶ÁдËٶȾÍÔ½Âý¡£ËùÒÔ£¬º¯ÊýÖоֲ¿±äÁ¿µÄ·ÃÎÊËÙ¶È×ÜÊÇ×î¿ìµÄ£¬¶øÈ«¾Ö±äÁ¿Í¨³£ÊÇ×îÂýµÄ£¨ÓÅ»¯JavascriptÒýÇæ£¬ÈçSafariÔÚijЩÇé¿öÏ¿ÉÓøıäÕâÖÖÇé¿ö£©¡£
Çë¼Çס£¬È«¾Ö±äÁ¿×ÜÊÇ´¦ÓÚÔËÐÐÆÚÉÏÏÂÎÄ×÷ÓÃÓòÁ´µÄ×îºóÒ»¸öλÖã¬ËùÒÔ×ÜÊÇ×îÔ¶²ÅÄܱ»·ÃÎʵġ£Ò»¸öºÃµÄ¾Ñé·¨ÔòÊÇ£ºÊ¹Óþֲ¿±äÁ¿´æ´¢±¾µØ·¶Î§Ö®ÍâµÄ±äÁ¿Öµ£¬Èç¹ûËüÃÇÔÚº¯ÊýÖеÄʹÓöàÓÚÒ»´Î¡£¿¼ÂÇÏÂÃæµÄÀý×Ó£º
function initUI(){ ¡¡¡¡var bd = document.body, ¡¡¡¡links = document.getElementsByTagName("a"), ¡¡¡¡i = 0, ¡¡¡¡len = links.length; ¡¡¡¡while(i < len){ ¡¡¡¡¡¡¡¡update(links[i++]); ¡¡¡¡} document.getElementById("go-btn").onclick = function(){ ¡¡¡¡¡¡¡¡start(); ¡¡¡¡}; ¡¡¡¡bd.className = "active";
|
´Ëº¯Êý°üº¬Èý¸ö¶ÔdocumentµÄÒýÓ㬶ødocumentÊÇÒ»¸öÈ«¾Ö¶ÔÏó¡£ËÑË÷ÖÁdocument£¬±ØÐë±éÀúÕû¸ö×÷ÓÃÓòÁ´£¬Ö±µ½×îºó²ÅÄÜÕÒµ½Ëü¡£Ê¹ÓÃÏÂÃæµÄ·½·¨¼õÇáÖØ¸´µÄÈ«¾Ö±äÁ¿·ÃÎʶÔÐÔÄܵÄÓ°Ï죺
function initUI(){ var doc=document, ¡¡ bd = doc.body, ¡¡¡¡links = doc.getElementsByTagName("a"), ¡¡¡¡i = 0, ¡¡¡¡len = links.length; ¡¡¡¡while(i < len){ ¡¡¡¡¡¡¡¡update(links[i++]); ¡¡¡¡} doc.getElementById("go-btn").onclick = function(){ ¡¡¡¡¡¡¡¡start(); ¡¡¡¡}; ¡¡¡¡bd.className = "active"; }
|
ÓÃdoc´úÌædocument¸ü¿ì£¬ÒòΪËüÊÇÒ»¸ö¾Ö²¿±äÁ¿¡£µ±È»£¬Õâ¸ö¼òµ¥µÄº¯Êý²»»áÏÔʾ³ö¾Þ´óµÄÐÔÄܸĽø£¬ÒòΪÊýÁ¿µÄÔÒò£¬²»¹ý¿ÉÒÔÏëÏóһϣ¬Èç¹û¼¸Ê®¸öÈ«²¿±äÁ¿·´¸´±»·ÃÎÊ£¬ÄÇôÐÔÄܸĽø½«ÏԵöàô³öÉ«¡£
Scope Chain Augmentation ¸Ä±ä×÷ÓÃÓòÁ´
Ò»¸öÀ´Ëµ£¬Ò»¸öÔËÐÐÆÚÉÏÏÂÎĵÄ×÷ÓÃÓòÁ´²»»á±»¸Ä±ä¡£µ«ÊÇ£¬ÓÐÁ½ÖÖ±í´ïʽ¿ÉÒÔÔÚÔËÐÐʱÁÙʱ¸Ä±äÔËÐÐÆÚÉÏÏÂÎÄ¡£µÚÒ»¸öÊÇwith±í´ïʽ£º
function initUI(){ with (document){ //avoid! var bd = body, links = getElementsByTagName("a"), i = 0, len = links.length; while(i < len){ update(links[i++]); } getElementById("go-btn").onclick = function(){ start(); }; bd.className = "active"; } }
|
´ËÖØÐ´°æ±¾Ê¹ÓÃÁËÒ»¸öwith±í´ïʽ£¬±ÜÃâÁ˶à´ÎÊéд¡°document¡±¡£Õâ¿´ÆðÀ´Ëƺõ¸üÓÐЧÂÊ£¬Êµ¼Ê²»È»£¬ÕâÀï²úÉúÁËÒ»¸öÐÔÄÜÎÊÌâ¡£
µ±´úÂëÁ÷Ö´Ðе½Ò»¸öwith±í´ïʽ£¬ÔËÐÐÆÚÉÏÏÂÎĵÄ×÷ÓÃÓò±»ÁÙʱ¸Ä±äÁË¡£Ò»¸öеĿɱä¶ÔÏ󽫱»´´½¨£¬Ëü°üº¬ÁËÖ¸¶¨¶ÔÏó£¨Õë¶ÔÕâ¸öÀýÌâÊÇdocument¶ÔÏ󣩵ÄËùÓÐÊôÐÔ¡£´Ë¶ÔÏó±»²åÈëµ½×÷ÓÃÓòÁ´µÄ×îǰ¶Ë¡£Òâζ×ÅÏÖÔÚº¯ÊýµÄËùÓоֲ¿±äÁ¿¶¼±»ÍÆÈëµ½µÚ¶þ¸ö×÷ÓÃÓòÁ´¶ÔÏóÖУ¬ËùÒÔ¾Ö²¿±äÁ¿µÄ·ÃÎÊ´ú¼Û±äµÄ¸ü¸ßÁË¡£
ÕýʽÒòΪÕâ¸öÔÒò£¬×îºÃ²»ÒªÊ¹ÓÃwith±í´ïʽ¡£ÕâÑù»áµÃ²»³¥Ê§¡£ÕýÈçÇ°ÃæÌáµ½µÄ£¬Ö»Òª¼òµ¥µÄ½«document´æ´¢ÔÚÒ»¸ö¾Ö²¿±äÁ¿ÖУ¬¾Í¿ÉÒÔ»ñµÃÐÔÄÜÉϵÄÌáÉý¡£
ÁíÒ»¸öÄܸıäÔËÐÐÆÚÉÏÏÂÎĵÄÊÇtry-catchÓï¾äµÄ×Ö¾äcatch¾ßÓÐͬÑùµÄЧ¹û¡£µ±try¿é·¢Éú´íÎóµÄʱ£¬³ÌÐò×Ô¶¯×ªÈëcatch¿é£¬²¢½«ËùÓоֲ¿±äÁ¿ÍÆÈëµÚ¶þ¸ö×÷ÓÃÓòÁ´¶ÔÏóÖУ¬Ö»ÒªcatchÖ®¿éÖ´ÐÐÍê±Ï£¬×÷ÓÃÓòÁ´¾Í»á·µ»Øµ½ÔÀ´µÄ״̬¡£
try { methodThatMightCauseAnError(); } catch (ex){ alert(ex.message); //×÷ÓÃÓòÁ´ÔÚÕâÀï·¢Éú¸Ä±ä }
|
Èç¹ûʹÓõõ±£¬try-catch±í´ïʽÊǷdz£ÓÐÓõÄÓï¾ä£¬ËùÒÔ²»½¨ÒéÍêÈ«±ÜÃâ¡£µ«ÊÇÒ»¸ötry-catchÓï¾ä²»Ó¦¸Ã×÷ΪJavascript´íÎó½â¾öµÄ°ì·¨£¬Èç¹ûÄãÖªµÀÒ»¸ö´íÎó»á¾³£·¢Éú£¬ÄÇô˵Ã÷Ó¦¸ÃÐ޸ĴúÂë±¾Éí¡£²»ÊÇô£¿
Dynamic Scope ¶¯Ì¬×÷ÓÃÓò
ÎÞÂÛÊÇwith±í´ïʽ»¹ÊÇtry-catch±í´ïʽµÄ×Ó¾äcatch£¬ÒÔ¼°°üº¬()µÄº¯Êý£¬¶¼±»ÈÏΪÊǶ¯Ì¬×÷ÓÃÓò¡£Ò»¸ö¶¯Ì¬×÷ÓÃÓòÒò´úÂëÔËÐжøÉú³É´æÔÚ£¬Òò´ËÎÞ·¨Í¨¹ý¾²Ì¬·ÖÎö£¨Í¨¹ý²é¿´´úÂ룩À´È·¶¨ÊÇ·ñ´æÔÚ¶¯Ì¬×÷ÓÃÓò¡£ÀýÈ磺
function execute(code) { ¡¡¡¡(code); ¡¡¡¡function subroutine(){ ¡¡¡¡ return window; } ¡¡¡¡var w = subroutine(); // wµÄÖµÊÇʲô£¿ };
|
execute()º¯Êý¿´ÉÏÈ¥ÏñÒ»¸ö¶¯Ì¬×÷ÓÃÓò£¬ÒòΪËüʹÓÃÁË()¡£w±äÁ¿µÄÖµÓë´«ÈëµÄcode´úÂëÓйء£´ó¶àÊýÇé¿öÏ£¬w½«µÈ¼ÛÓÚÈ«¾ÖµÄwindow¶ÔÏó¡£µ«ÊÇÈç¹û´«ÈëµÄÊÇ:
execute("var window = {};");
|
ÕâÖÖÇé¿öÏ£¬()ÔÚexecute()º¯ÊýÖд´½¨ÁËÒ»¸ö¾Ö²¿window±äÁ¿¡£ËùÒÔw½«µÈ¼ÛÓÚÕâ¸ö¾Ö²¿window±äÁ¿¶ø²»ÊÇÈ«¾ÖwindowµÄÄǸö¡£ËùÒÔ²»ÔËÐÐÕâ¶Î´úÂëÊÇÎÞ·¨Ô¤Öª×îºóµÄ¾ßÌåÇé¿ö£¬±êʶ·ûwindowµÄÈ·Çк¬ÒåÎÞ·¨Ô¤ÏÈÖªµÀ¡£
Òò´Ë£¬Ö»ÓÐÔÚ¾ø¶Ô±ØÒªÊ±¿Ì²ÅÍÆ¼öʹÓö¯Ì¬×÷ÓÃÓò¡£
Closure,Scope,and Memory ±Õ°ü£¬×÷ÓÃÓò£¬ºÍÄÚ´æ
±Õ°üÊÇJavascript×îÇ¿´óµÄÒ»¸ö·½Ã棬ËüÔÊÐíº¯Êý·ÃÎʾֲ¿·¶Î§Ö®ÍâµÄµÄÊý¾Ý¡£ÎªÁ˽âÓë±Õ°üÓйصÄÐÔÄÜÎÊÌ⣬¿¼ÂÇÏÂÃæµÄÀý×Ó£º
function assignEvents(){ ¡¡¡¡var id = "xdi9592"; ¡¡¡¡document.getElementById("save-btn").onclick = function(event){ ¡¡¡¡¡¡¡¡saveDocument(id); }; }
|
assignEvents()º¯ÊýΪDOMÔªËØÖ¸¶¨ÁËÒ»¸öʼþ´¦Àí¾ä±ú¡£´Ëʼþ´¦ÀíÊÇÒ»¸ö±Õ°ü£¬µ±º¯ÊýÖ´Ðд´½¨Ê±¿ÉÒÔ·ÃÎÊÆä·¶Î§ÄÚ²¿µÄid±äÁ¿¡£¶øÕâÖÖ·½·¨·â±ÕÁ˶Ôid±äÁ¿µÄ·ÃÎÊ£¬±ØÐë´´½¨Ò»¸öÌØ¶¨µÄ×÷ÓÃÓòÁ´¡£
µ±assignEvents()º¯ÊýÖ´ÐÐʱ£¬Ò»¸ö¼¤»î¶ÔÏó±»´´½¨£¬²¢ÇÒ°üº¬ÁËһЩӦÓеÄÄÚÈÝ£¬ÆäÖаüº¬id±äÁ¿¡£Ëü½«³ÉΪÔËÐÐÆÚÉÏÏÂÎÄ×÷ÓÃÓòÁ´ÉϵĵÚÒ»¸ö¶ÔÏó£¬È«¾Ö¶ÔÏóÊǵڶþ¸ö¡£µ±±Õ°ü´´½¨µÄʱ£¬[[Scope]]ÊôÐÔÓëÕâЩ¶ÔÏóÒ»Æð±»³õʼ»¯£¬ÈçÏÂͼ£º

ÓÉÓÚ±Õ°üµÄ[[Scope]]ÊôÐÔ°üº¬ÓëÔËÐÐÆÚÉÏÏÂÎÄ×÷ÓÃÓòÁ´ÏàͬµÄ¶ÔÏóÒýÓ㬻á²úÉú¸±×÷Óã¬Í¨³££¬Ò»¸öº¯ÊýµÄ¼¤»î¶ÔÏóÓëÔËÐÐÆÚÉÏÏÂÎÄһͬÏú»Ù¡£µ±Éæ¼°±Õ°üʱ£¬¼¤»î¶ÔÏó¾ÍÎÞ·¨Ïú»ÙÁË£¬ÒòΪÈÔÈ»´æÔÚÓÚ±Õ°üµÄ[[Scope]]ÊôÐÔÖС£ÕâÒâζ׎ű¾ÖеıհüÓë·Ç±Õ°üº¯ÊýÏà±È£¬ÐèÒª¸ü¶àµÄÄڴ濪Ïú¡£ÓÈÆäÔÚIE£¬Ê¹Ó÷DZ¾µØJavascript¶ÔÏóʵÏÖDOM¶ÔÏ󣬱հü¿ÉÄܵ¼ÖÂÄÚ´æÐ¹Â¶¡£
µ±±Õ°ü±»Ö´ÐУ¬Ò»¸öÔËÐÐÆÚÉÏÏÂÎĽ«±»´´½¨£¬ËüµÄ×÷ÓÃÓòÁ´Óë[[Scope]]ÖÐÒýÓõÄÁ½¸öÏàͬµÄ×÷ÓÃÓòÁ´Í¬Ê±±»³õʼ»¯£¬È»ºóÒ»¸öÐµļ¤»î¶ÔÏóΪ±Õ°ü×ÔÉí´´½¨¡£ÈçÏÂͼ£º

¿ÉÒÔ¿´µ½£¬idºÍsaveDocumentÁ½¸ö±êʶ·û´æÔÚÓÚ×÷ÓÃÓòÁ´µÚÒ»¸ö¶ÔÏóÖ®ºóµÄλÖá£ÕâÊDZհü×îÖ÷ÒªµÄÐÔÄܹØ×¢µã£ºÄã¾³£·ÃÎÊһЩ·¶Î§Ö®ÍâµÄ±êʶ·û£¬Ã¿´Î·ÃÎʶ¼½«µ¼ÖÂһЩÐÔÄÜËðʧ¡£
Ôڽű¾ÖÐ×îºÃСÐĵÄʹÓñհü£¬ÄÚ´æºÍÔËÐÐËٶȶ¼ÖµµÃ±»¹Ø×¢¡£µ«ÊÇ£¬Äã¿ÉÒÔͨ¹ýÉÏÎÄ̸µ½µÄ£¬½«³£ÓõÄÓòÍâ±äÁ¿´æÈë¾Ö²¿±äÁ¿ÖУ¬È»ºóÖ±½Ó·ÃÎʾֲ¿±äÁ¿¡£
Object Members ¶ÔÏó³ÉÔ±
¶ÔÏó³ÉÔ±°üÀ¨ÊôÐԺͷ½·¨£¬ÔÚJavascriptÖУ¬¶þÕß²î±ðÉõ΢¡£¶ÔÏóµÄÒ»¸öÃüÃû³ÉÔ±¿ÉÒÔ°üº¬ÈκÎÊý¾ÝÀàÐÍ¡£¼ÈÈ»º¯ÊýÒ²ÊÇÒ»ÖÖ¶ÔÏó£¬ÄÇô¶ÔÏó³ÉÔ±³ýÁË´«Í³Êý¾ÝÀàÐÍÍ⣬Ҳ¿ÉÒÔ°üº¬º¯Êý¡£µ±Ò»¸öÃüÃû³ÉÔ±ÒýÓÃÁËÒ»¸öº¯Êýʱ£¬Ëü±»³Æ×÷Ò»¸ö¡°·½·¨¡±£¬¶øÒ»¸ö·Çº¯ÊýÀàÐ͵ÄÊý¾ÝÔò±»³Æ×÷¡°ÊôÐÔ¡±¡£
ÈçǰËùÑÔ£¬¶ÔÏó³ÉÔ±µÄ·ÃÎʱÈÖ±½ÓÁ¿ºÍ¾Ö²¿±äÁ¿·ÃÎÊËÙ¶ÈÂý£¬ÔÚijЩä¯ÀÀÆ÷ÉϱȷÃÎÊÊý×黹Âý£¬ÕâÓëJavascriptÖжÔÏóµÄÐÔÖÊÓйء£
Prototype ÔÐÍ¡¡¡¡
JavascriptÖеĶÔÏóÊÇ»ùÓÚÔÐ͵ģ¬Ò»¸ö¶ÔÏóͨ¹ýÄÚ²¿ÊôÐ԰󶨵½ËüµÄÔÐÍ¡£Firefox£¬SafariºÍChromeÏò¿ª·¢ÈËÔ±¿ª·ÅÕâÒ»ÊôÐÔ£¬³Æ×÷_proto_¡£ÆäËûä¯ÀÀÆ÷²»ÔÊÐí½Å±¾·ÃÎÊÕâ¸öÊôÐÔ¡£ÈκÎʱºòÎÒÃÇ´´½¨Ò»¸öÄÚÖÃÀàÐ͵ÄʵÏÖ£¬ÈçObject»òArray£¬ÕâЩʵÀý×Ô¶¯ÓµÓÐÒ»¸öObject×÷ΪËüÃǵÄÔÐÍ¡£¶ø¶ÔÏó¿ÉÒÔÓÐÁ½ÖÖÀàÐ͵ijÉÔ±£ºÊµÀý³ÉÔ±ºÍÔÐͳÉÔ±¡£ÊµÀý³ÉÔ±Ö±½Ó´æÔÚÓÚʵÀý×ÔÉí¶øÔÐͳÉÔ±Ôò´Ó¶ÔÏó¼Ì³Ð¡£¿¼ÂÇÈçÏÂÀý×Ó£º
var book = { ¡¡¡¡title: "High Performance JavaScript", ¡¡ publisher: "Yahoo! Press" }; alert(book.toString()); //"[object Object]"
|
´Ë´úÂëÖÐbookÓÐtitleºÍpublisherÁ½¸öʵÀý³ÉÔ±¡£×¢ÒâËü²¢Ã»Óж¨ÒåtoString()½Ó¿Ú£¬µ«Õâ¸ö½Ó¿ÚÈ´±»µ÷ÓÃÇÒûÓÐÅ׳ö´íÎó¡£toString()º¯Êý¾ÍÊÇÒ»¸öbook¼Ì³Ð×ÔÔÐͶÔÏóµÄÔÐͳÉÔ±¡£ÏÂͼ±íʾÁËËüÃǵĹØÏµ£º

´¦Àí¶ÔÏó³ÉÔ±µÄ¹ý³ÌÓë´¦Àí±äÁ¿Ê®·ÖÏàËÆ¡£µ±book.toString()±»µ÷ÓÃʱ£¬¶Ô³ÉÔ±½øÐÐÃûΪ¡°toString¡±µÄËÑË÷£¬Ê×ÏÈ´Ó¶ÔÏóʵÀý¿ªÊ¼£¬Èô¹ûûÓÐÃûΪtoStringµÄ³ÉÔ±£¬ÄÇô¾ÍתÏòËÑË÷ÔÐͶÔÏó£¬ÔÚÄÇÀï·¢ÏÖÁËtoString()·½·¨²¢Ö´ÐÐËü¡£Í¨¹ýÕâÖÖ·½·¨£¬book¿ÉÒÔ·ÃÎÊËüµÄÔÐÍËùÓµÓеÄÿ¸öÊôÐԺͷ½·¨¡£
ÎÒÃÇ¿ÉÒÔʹÓÃhasOwnProperty()º¯ÊýÈ·¶¨Ò»¸ö¶ÔÏóÊÇ·ñ¾ßÓÐÌØ¶¨Ãû³ÆµÄʵÀý³ÉÔ±¡£ÊµÀýÂÔ¡£
Prototype Chains ÔÐÍÁ´
¶ÔÏóµÄÔÐ;ö¶¨ÁËÒ»¸öʵÀýµÄÀàÐÍ¡£Ä¬ÈÏÇé¿öÏ£¬ËùÓжÔÏó¶¼ÊÇObjectµÄʵÀý£¬²¢¼Ì³ÐÁËËùÓлù±¾·½·¨¡£ÈçtoString()¡£ÎÒÃÇÒ²¿ÉÒÔʹÓù¹ÔìÆ÷´´½¨ÁíÍâÒ»ÖÖÔÐÍ¡£ÀýÈ磺
function Book(title, publisher){ ¡¡¡¡this.title = title; ¡¡¡¡this.publisher = publisher; } Book.prototype.sayTitle = function(){ ¡¡¡¡alert(this.title); }; ¡¡¡¡var book1 = new Book("High Performance JavaScript", "Prototype Chains"); ¡¡¡¡var book2 = new Book("JavaScript: The Good Parts", "Prototype Chains"); ¡¡¡¡alert(book1 instanceof Book); //true ¡¡¡¡alert(book1 instanceof Object); //true ¡¡¡¡book1.sayTitle(); //"High Performance JavaScript" ¡¡¡¡alert(book1.toString()); //"[object Object]"
|
Book¹¹ÔìÆ÷ÓÃÓÚ´´½¨Ò»¸öеÄbookʵÀýbook1¡£book1µÄÔÐÍ£¨_proto_£©ÊÇBook.prototype£¬Book.prototypeµÄÔÐÍÊÇObject¡£Õâ¾Í´´½¨ÁËÒ»ÌõÔÐÍÁ´¡£
×¢Ò⣬book1ºÍbook2¹²ÏíÁËͬһ¸öÔÐÍÁ´¡£Ã¿¸öʵÀýÓµÓÐ×Ô¼ºµÄtitleºÍpublisherÊôÐÔ£¬ÆäËû³ÉÔ±¾ù¼Ì³Ð×ÔÔÐÍ¡£¶øÕýÈçÄãËù»³ÒɵÄÄÇÑù£¬ÉîÈëÔÐÍÁ´Ô½ÉËÑË÷µÄËٶȾͻáÔ½Âý£¬ÌرðÊÇIE£¬Ã¿ÉîÈëÔÐÍÁ´Ò»²ã¶¼»áÔö¼ÓÐÔÄÜËðʧ¡£¼Çס£¬ËÑË÷ʵÀý³ÉÔ±µÄ¹ý³Ì±È·ÃÎÊÖ±½ÓÁ¿ºÍ¾Ö²¿±äÁ¿¸ºµ£¸üÖØ£¬ËùÒÔÔö¼Ó±éÀúÔÐÍÁ´µÄ¿ªÏúÕýºÃ·Å´óÁËÕâÖÖЧ¹û¡£
Nested Members ǶÌ׳ÉÔ±
ÓÉÓÚ¶ÔÏó³ÉÔ±¿ÉÄܰüº¬ÆäËû³ÉÔ±¡£Æ©Èçwindow.location.href(»ñÈ¡µ±Ç°Ò³ÃæµÄurl)ÕâÖÖģʽ¡£Ã¿Óöµ½Ò»¸öµãºÅ(.)£¬JavascriptÒýÇæ¾ÍÒªÔÚ¶ÔÏó³ÉÔ±ÉÏÖ´ÐÐÒ»´Î½âÎö¹ý³Ì£¬¶øÇÒ³ÉԱǶÌ×Ô½É·ÃÎÊËÙ¶ÈÔ½Âý¡£location.href×ÜÊÇ¿ìÓÚwindow.location.href£¬¶øºóÕß±Èwindow.location.href.toString()¸ü¿ì¡£Èç¹ûÕâЩÊôÐÔ²»ÊǶÔÏóµÄʵÀý³ÉÔ±£¬ÄÇô³ÉÔ±½âÎö»¹ÒªÔÚÿ¸öµãÉÏËÑË÷ÔÐÍÁ´£¬Õ⽫ÐèÒª¸ü¶àµÄʱ¼ä¡£
Summary ×ܽá
1.ÔÚJavascriptÖУ¬Êý¾Ý´æ´¢Î»ÖÿÉÒÔ¶Ô´úÂëÕûÌåÐÔÄܲúÉúÖØÒªÓ°Ïì¡£ÓÐËÄÖÖÊý¾Ý·ÃÎÊÀàÐÍ£ºÖ±½ÓÁ¿£¬±äÁ¿£¬Êý×éÏ¶ÔÏó³ÉÔ±¡£¶ÔËüÃÇÎÒÃÇÓв»Í¬µÄÐÔÄÜ¿¼ÂÇ¡£
2.Ö±½ÓÁ¿ºÍ¾Ö²¿±äÁ¿µÄ·ÃÎÊËٶȷdz£¿ì£¬¶øÊý×éÏîºÍ¶ÔÏó³ÉÔ±ÐèÒª¸ü³¤Ê±¼ä¡£
3.¾Ö²¿±äÁ¿±ÈÍⲿ±äÁ¿¿ì£¬ÊÇÒòΪËüλÓÚ×÷ÓÃÓòÁ´µÄµÚÒ»¸ö¶ÔÏóÖС£±äÁ¿ÔÚ×÷ÓÃÓòÁ´ÖеÄλÖÃÔ½É·ÃÎÊËùÐèµÄʱ¼ä¾ÍÔ½³¤¡£¶øÈ«¾Ö±äÁ¿×ÜÊÇ×îÂýµÄ£¬ÒòΪËü´¦ÓÚ×÷ÓÃÓòÁ´µÄ×îºóÒ»»·¡£
4.±ÜÃâʹÓÃwith±í´ïʽ£¬ÒòΪËü¸Ä±äÁËÔËÐÐÆÚÉÏÏÂÎĵÄ×÷ÓÃÓòÁ´¡£¶øÇÒÓ¦µ±ÌرðСÐĶԴýtry-catchÓï¾äµÄcatch×Ӿ䣬Ëü¾ßÓÐͬÑùµÄЧ¹û¡£
5.ǶÌ×¶ÔÏó³ÉÔ±»áÔì³ÉÖØ´óÐÔÄÜÓ°Ï죬¾¡Á¿ÉÙÓá£
6.Ò»°ã¶øÑÔ£¬ÎÒÃÇͨ¹ý½«¾³£Ê¹ÓõĶÔÏó³ÉÔ±£¬Êý×éÏºÍÓòÍâ±äÁ¿´æÈë¾Ö²¿±äÁ¿ÖС£È»ºó£¬·ÃÎʾֲ¿±äÁ¿µÄËÙ¶È»á¿ìÓÚÄÇЩÔʼ±äÁ¿¡£
ͨ¹ýÉÏÊö²ßÂÔ£¬¿ÉÒÔ¼«´óÌá¸ßÄÇЩʹÓÃJavascript´úÂëµÄÍøÒ³Ó¦ÓõÄʵ¼ÊÐÔÄÜ¡£
|