j**ascriptÉîÈëÀí½âjs±Õ°ü

ʱ¼ä£º2016.04.19 ·¢²¼ÈË£º365Ī

j**ascriptÉîÈëÀí½âjs±Õ°ü

Òѽâ¾öÎÊÌâ

¹È¸è365ĪÓû§ÔÚ2016.04.19Ìá½»Á˹ØÓÚ¡°Ì¹¿Ë´óÕ½j**ascriptÉîÈëÀí½âjs±Õ°ü¡±µÄÌáÎÊ£¬»¶Ó­´ó¼ÒÓ¿Ô¾·¢±í×Ô¼ºµÄ¹Ûµã¡£Ä¿Ç°¹²ÓÐ1¸ö»Ø´ð£¬×îºó¸üÐÂÓÚ2024-12-04T07:33:31¡£Ï£Íû´ó¼ÒÄܹ»°ïÖúËý¡£

ÏêϸÎÊÌâÃèÊö¼°ÒÉÎÊ£ºÆÚ´ýÄúµÄ´ð°¸£¬ÎÒ²»ÖªµÀ˵ʲô²ÅºÃ,³ýÁËлл £¡

Ï£ÍûÒÔϵĻشð£¬Äܹ»°ïÖúÄã¡£

µÚ1¸ö»Ø´ð

Óû§Ãû£ºfÊØ¶¥»¬Çåͬ¼¤µÃ¶ÌºÁiezzcb  

Ò»¡¢±äÁ¿µÄ×÷ÓÃÓò

ÒªÀí½â±Õ°ü£¬Ê×ÏȱØÐëÀí½âÎÊ´ðJ**ascriptÌØÊâµÄ±äÁ¿×÷ÓÃÓò¡£

±äÁ¿µÄ×÷ÓÃÓòÎ޷ǾÍÊÇÁ½ÖÖ£ºÈ«¾Ö±äÁ¿ºÍ¾Ö²¿±äÁ¿¡£

J**ascriptÓïÑÔµÄÌØÊâÖ®´¦£¬¾ÍÔÚÓÚº¯ÊýÄÚ²¿¿ÉÒÔÖ±½Ó¶Áȡȫ¾Ö±äÁ¿¡£


Js´úÂë

¡¡¡¡varn=999;

¡¡¡¡functionf1À¼¼áÖ´Æßÿ(){
¡¡¡¡¡¡¡¡alert(n);
¡¡¡¡}

¡¡¡¡f1();//999

ÁíÒ»·½Ã棬ÔÚº¯ÊýÍⲿ×ÔÈ»ÎÞ·¨¶ÁÈ¡º¯ÊýÄڵľֲ¿±äÁ¿¡£

Js´úÂë

¡¡¡¡functionf1(){
¡¡¡¡¡¡¡¡varn=999;
¡¡¡¡}

¡¡¡¡alert(n);//error

ÕâÀïÓÐÒ»¸öµØ·½ÐèҪעÒ⣬º¯Êý**ÉùÃ÷±ä¾ö¹Ì½­´íËùÀú°à·ÊÍ»ÉñÁ¿µÄʱºò£¬Ò»¶¨ÒªÊ¹ÓÃvarÃüÁî¡£Èç¹û²»Óõϰ£¬Äãʵ¼ÊÉÏÉùÃ÷ÁËÒ»ÕÔΰ¸öÈ«¾Ö±äÁ¿£¡

Js´úÂë

¡¡Ó°Ñ¹Ê×ͬÏÈÃû³»¹³õ¡¡functionf1(){
¡¡¡¡¡¡¡¡n=999;
¡¡¡¡}

¡¡¡¡f1();

¡¡¡¡alert(n);//999

--------------------------------------------------------------------------------------------------------

¶þ¡¢ÈçºÎ´ÓÍⲿ¶ÁÈ¡¾Ö²¿±äÁ¿£¿

³öÓÚÖÖÖÖÔ­Òò£¬ÎÒÃÇÓÐʱºòÐèÒªµÃµ½º¯ÃæÅÅÐÐÉõ¸Å·á³öÍÁ·âÊýÄڵľֲ¿±äÁ¿¡£µ«ÊÇ£¬Ç°ÃæÁùÖ²·¿·ÛƬ·çijÔÚÕûÉñ¸»ÒѾ­Ëµ¹ýÁË£¬Õý³£Çé¿öÏ£¬ÕâÊǰ첻µ½µÄ£¬Ö»ÓÐͨ¹ý±äͨ·½·¨²ÅÄÜʵ³¤ÏÖ¡£

ÄǾÍÊÇÔÚº¯ÊýµÄ**Ìú£¬ÔÙ¶¨ÒåÒ»¸öº¯Êý¡£

Js´úÂë

¡¡¡¡functiÉñÏÔÐÞÔðϵ°ÙºÏµÐ̨ÇÐonf1(){

¡¡¡¡¡¡¡¡n=999;

¡¡¡¡¡¡¡¡functionf2(){
¡¡¡¡¡¡¡¡¡¡¡¡alert(n);//999
¡¡¡¡¡¡¡¡}

¡¡¡¡}

ÔÚÉÏÃæµÄ´úÂëÖУ¬º¯Êýf2¾Í±»°üÀ¨ÔÚº¯Êýf1**£¬Õâʱf1**µÄËùÓоֲ¿±äÁ¿£¬¶Ôf2¶¼ÊǿɼûµÄ¡£µ«ÊÇ·´¹ýÀ´¾Í²»ÐУ¬f2**µÄ¾Ö²¿±äÁ¿£¬ÆµÖ®¶àËã¼ÙÄÚ¶Ôf1¾ÍÊDz»¿É¼ûµÄ¡£Õâ¾ÍÊÇJ**ascriptÓïÑÔÌØÓеġ°Á´Ê½×÷ÓÃÓò¡±½á¹¹£¨chainscope£©£¬

×Ó¶ÔÏó»áÒ»¼¶¹ÊÈôÓÚÉñÍâ×ÊÈÔľ²ËÉÆÄÄÒ»¼¶µØÏòÉÏѰÕÒËùÓи¸¶ÔÏóµÄ±äÁ¿¡£ËùÒÔ£¬¸¸¶ÔÏóµÄËùÓбäÁ¿£¬¶Ô×Ó¶ÔÏó¶¼ÊǿɼûµÄ£¬·´Ö®Ôò²»³ÉÁ¢¡£

¼ÈÈ»f2¿ÉÒÔ¶ÁÈ¡f1Öеľֲ¿±äÁ¿£¬ÄÇôֻҪ°Ñf2×÷Ϊ·µ»ØÖµ£¬ÎÒÃDz»¾Í¿ÉÒÔÔÚf1Íⲿ¶ÁÈ¡ËüµÄ**±äÁ¿ÁËÂð£¡


Js´úÂë

¡¡¡¡functionf1(){

¡¡¡¡¡¡¡¡n=999;

¡¡¡¡¡¡¡¡functionf2(){
¡¡¡¡¡¡¡¡¡¡¡¡alert(n);
¡¡¡¡¡¡¡¡}

¡¡¡¡¡¡¡¡returnf2;

¿¼¸ÉÉú°¸¡¡¡¡}

¡¡¡¡varresult=f1();

¡¡¡¡result();//999

---ÓÑ»Ó--------Ä£»µÊÀÐÍ---------------------------------Í·³Ðºóʾµ«----------------------------------------------------ÔÂͶ¸ùÔ¤¼±¶Ü¸Ã--------

Èý¡¢±Õ°üµÄ¸ÅÄî

ÉÏÒ»½ÚÖø¹¤°×Çú¸ù³É·¶´úÂëÖеÄf2º¯Êý£¬¾ÍÊDZհü¡£

¸÷ÖÖרҵÎÄÏ×Éϵġ°±Õ°ü¡±£¨closure£©¶¨Òå·Ç³£³éÏ󣬺ÜÄÑ¿´¶®¡£ÎÒµÄÀí½âÊÇ£¬±Õ°ü¾ÍÊÇÄܹ»¶ÁÈ¡ÆäËûº¯Êý**±äÁ¿µÄº¯Êý¡£

ÓÉÓÚÔÚJ**ascriptÓïÑÔÖУ¬Ö»Óк¯Êý**µÄ×Óº¯Êý²ÅÄܶÁÈ¡¾Ö²¿±äÁ¿£¬Òò´Ë¿ÉÒ԰ѱհü¼òµ¥Àí½â³É¡°¶¨ÒåÔÚÒ»¸öº¯Êý**µÄº¯Êý¡±¡£

ËùÒÔ£¬ÔÚ±¾ÖÊÉÏ£¬±Õ°ü¾ÍÊǽ«º¯Êý**ºÍº¯ÊýÍⲿÁ¬½ÓÆðÀ´µÄÒ»×ùÇÅÁº¡£

--------------------------------------------------------------------------------------------------------b

ËÄ¡¢±Õ°üµÄÓÃ;

±Õ°ü¿ÉÒÔÓÃÔÚÐí¶àµØ·½¡£ËüµÄ×î´óÓô¦ÓÐÁ½¸ö£¬Ò»¸öÊÇÇ°ÃæÌáµ½µÄ¿ÉÒÔ¶ÁÈ¡º¯Êý**µÄ±äÁ¿£¬ÁíÒ»¸ö¾ÍÊÇÈÃÕâЩ±äÁ¿µÄֵʼÖÕ±£³ÖÔÚÄÚ´æÖС£

ÔõôÀ´Àí½âÕâ¾ä»°ÄØ£¿Çë¿´ÏÂÃæµÄ´úÂë¡£


Js´úÂë

¡¡¡¡functionf1(){

¡¡¡¡¡¡¡¡varn=999;

¡¡¡¡¡¡¡¡nAdd=function(){n+=1}

¡¡¡¡¡¡¡¡functionf2(){
¡¡¡¡¡¡¡¡¡¡¡¡alert(n);
¡¡¡¡¡¡¡¡}

¡¡¡¡¡¡¡¡returnf2;

¡¡¡¡}

¡¡¡¡varresult=f1();

¡¡¡¡result();//999

¡¡¡¡nAdd();

¡¡¡¡result();//1000

ÔÚÕâ¶Î´úÂëÖУ¬resultʵ¼ÊÉϾÍÊDZհüf2º¯Êý¡£ËüÒ»**ÔËÐÐÁËÁ½´Î£¬µÚÒ»´ÎµÄÖµÊÇ999£¬µÚ¶þ´ÎµÄÖµÊÇ1000¡£ÕâÃ÷ÁË£¬º¯Êýf1Öеľֲ¿±äÁ¿nÒ»Ö±±£´æÔÚÄÚ´æÖУ¬²¢Ã»ÓÐÔÚf1µ÷Óúó±»×Ô¶¯**¡£

Ϊʲô»áÕâÑùÄØ£¿Ô­Òò¾ÍÔÚÓÚf1ÊÇf2µÄ¸¸º¯Êý£¬¶øf2±»¸³¸øÁËÒ»¸öÈ«¾Ö±äÁ¿£¬Õâµ¼ÖÂf2ʼÖÕÔÚÄÚ´æÖУ¬¶øf2µÄ´æÔÚÒÀÀµÓÚf1£¬Òò´Ëf1ҲʼÖÕÔÚÄÚ´æÖУ¬²»»áÔÚµ÷ÓýáÊøºó£¬±»À¬»ø»ØÊÕ»úÖÆ£¨garbagecollection£©»ØÊÕ¡£

Õâ¶Î´úÂëÖÐÁíÒ»¸öÖµµÃ×¢ÒâµÄµØ·½£¬¾ÍÊÇ¡°nAdd=function(){n+=1}¡±ÕâÒ»ÐУ¬Ê×ÏÈÔÚnAddÇ°ÃæÃ»ÓÐʹÓÃvar¹Ø¼ü×Ö£¬Òò´ËnAddÊÇÒ»¸öÈ«¾Ö±äÁ¿£¬¶ø²»ÊǾֲ¿±äÁ¿¡£Æä´Î£¬nAddµÄÖµÊÇÒ»¸öÄäÃûº¯Êý£¨anonymousfunction£©£¬¶øÕâ¸ö

ÄäÃûº¯Êý±¾ÉíÒ²ÊÇÒ»¸ö±Õ°ü£¬ËùÒÔnAddÏ൱ÓÚÊÇÒ»¸ösetter£¬¿ÉÒÔÔÚº¯ÊýÍⲿ¶Ôº¯Êý**µÄ¾Ö²¿±äÁ¿½øÐвÙ×÷¡£

--------------------------------------------------------------------------------------------------------

Î塢ʹÓñհüµÄ×¢Òâµã

1£©ÓÉÓÚ±Õ°ü»áʹµÃº¯ÊýÖеıäÁ¿¶¼±»±£´æÔÚÄÚ´æÖУ¬ÄÚ´æÏûºÄºÜ´ó£¬ËùÒÔ²»ÄÜÀÄÓñհü£¬·ñÔò»áÔì³ÉÍøÒ³µÄÐÔÄÜÎÊÌ⣬ÔÚIEÖпÉÄܵ¼ÖÂÄÚ´æÐ¹Â¶¡£½â¾ö·½·¨ÊÇ£¬ÔÚÍ˳öº¯Êý֮ǰ£¬½«²»Ê¹Óõľֲ¿±äÁ¿È«²¿É¾³ý¡£

2£©±Õ°ü»áÔÚ¸¸º¯ÊýÍⲿ£¬¸Ä±ä¸¸º¯Êý**±äÁ¿µÄÖµ¡£ËùÒÔ£¬Èç¹ûÄã°Ñ¸¸º¯Êýµ±×÷¶ÔÏó£¨object£©Ê¹Ó㬰ѱհüµ±×÷ËüµÄ¹«Ó÷½·¨£¨PublicMethod£©£¬°Ñ**±äÁ¿µ±×÷ËüµÄ˽ÓÐÊôÐÔ£¨privatevalue£©£¬ÕâÊ»¶¨ÒªÐ¡ÐÄ£¬²»ÒªËæ±ã

¸Ä±ä¸¸º¯Êý**±äÁ¿µÄÖµ¡£

--------------------------------------------------------------------------------------------------------

Áù¡¢Ë¼¿¼Ìâ

Èç¹ûÄãÄÜÀí½âÏÂÃæ´úÂëµÄÔËÐнá¹û£¬Ó¦¸Ã¾ÍËãÀí½â±Õ°üµÄÔËÐлúÖÆÁË¡£

Js´úÂë
¡¡¡¡varname="TheWindow";
¡¡¡¡varobject={
¡¡¡¡¡¡¡¡name:"MyObject",
¡¡¡¡¡¡¡¡getNameFunc:function(){
¡¡¡¡¡¡¡¡¡¡¡¡returnfunction(){
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡return***.name;
¡¡¡¡¡¡¡¡¡¡};
¡¡¡¡¡¡¡¡}
};
alert(object.getNameFunc()());//TheWindow

--------------------------------------------------------------------------------------------------------
J**aScript±Õ°üÀý×Ó

functionouterFun()
{
vara=0;
functioninnerFun()
{
a++;
alert(a);
}
}
innerFun()

ÉÏÃæµÄ´úÂëÊÇ´íÎóµÄ.innerFun()µÄ×÷ÓÃÓòÔÚouterFun()**,ËùÔÚouterFun()Íⲿµ÷ÓÃËüÊÇ´íÎóµÄ.

¸Ä³ÉÈçÏÂ,Ò²¾ÍÊDZհü:

Js´úÂë

functionouterFun()
{
vara=0;
functioninnerFun()
{
a++;
alert(a);
}
returninnerFun;//×¢ÒâÕâÀï
}
varobj=outerFun();
obj();//½á¹ûΪ1
obj();//½á¹ûΪ2
varobj2=outerFun();
obj2();//½á¹ûΪ1
obj2();//½á¹ûΪ2

ʲôÊDZհü:

µ±**º¯ÊýÔÚ¶¨ÒåËüµÄ×÷ÓÃÓòµÄÍⲿ±»ÒýÓÃʱ,¾Í´´½¨Á˸Ã**º¯ÊýµÄ±Õ°ü,Èç¹û**º¯ÊýÒýÓÃÁËλÓÚÍⲿº¯ÊýµÄ±äÁ¿,µ±Íⲿº¯Êýµ÷ÓÃÍê±Ïºó,ÕâЩ±äÁ¿ÔÚÄÚ´æ²»»á±»ÊÍ·Å,ÒòΪ±Õ°üÐèÒªËüÃÇ.

--------------------------------------------------------------------------------------------------------

ÔÙÀ´¿´Ò»¸öÀý×Ó

Js´úÂë

functionouterFun()
{
vara=0;
alert(a);
}
vara=4;
outerFun();
alert(a);

½á¹ûÊÇ0,4.ÒòΪÔÚº¯Êý**ʹÓÃÁËvar¹Ø¼ü×Öά»¤aµÄ×÷ÓÃÓòÔÚoutFun()**.

ÔÙ¿´ÏÂÃæµÄ´úÂë:

Js´úÂë

functionouterFun()
{
//ûÓÐvar
a=0;
alert(a);
}
vara=4;
outerFun();
alert(a);
½á¹ûΪ0,0ÕæÊÇÆæ¹Ö,ÎªÊ²Ã´ÄØ?

×÷ÓÃÓòÁ´ÊÇÃèÊöÒ»ÖÖ·¾¶µÄÊõÓï,ÑØ×ŸÃ·¾¶¿ÉÒÔÈ·¶¨±äÁ¿µÄÖµ.µ±Ö´ÐÐa=0ʱ,ÒòΪûÓÐʹÓÃvar¹Ø¼ü×Ö,Òò´Ë¸³Öµ²Ù×÷»áÑØ×Å×÷ÓÃÓòÁ´µ½vara=4;²¢¸Ä±äÆäÖµ.

--------------------------------------------------------------------------------------------------------------------------------------------------

Èç¹ûÄã¶Ôj**ascript±Õ°ü»**»ÊǺÜÀí½â£¬ÄÇôÇë¿´ÏÂÃæ×ªÔØµÄÎÄÕ£º(×ªÔØ:http://www.***.com/archives/247)

Ò»¡¢Ê²Ã´ÊDZհü£¿

¹Ù·½¡±µÄ½âÊÍÊÇ£º±Õ°üÊÇÒ»¸öÓµÓÐÐí¶à±äÁ¿ºÍ°ó¶¨ÁËÕâЩ±äÁ¿µÄ»·¾³µÄ±í´ïʽ£¨Í¨³£ÊÇÒ»¸öº¯Êý£©£¬Òò¶øÕâЩ±äÁ¿Ò²ÊǸñí´ïʽµÄÒ»²¿·Ö¡£
ÏàÐźÜÉÙÓÐÈËÄÜÖ±½Ó¿´¶®Õâ¾ä»°£¬ÒòΪËûÃèÊöµÄ̫ѧÊõ¡£ÆäʵÕâ¾ä»°Í¨Ë×µÄÀ´Ëµ¾ÍÊÇ£ºJ**aScriptÖÐËùÓеÄfunction¶¼ÊÇÒ»¸ö±Õ°ü¡£²»¹ýÒ»°ãÀ´Ëµ£¬Ç¶Ì×µÄfunctionËù**ÉúµÄ±Õ°ü¸üΪǿ´ó£¬Ò²ÊǴ󲿷ÖʱºòÎÒÃÇËùνµÄ¡°±Õ°ü¡±¡£¿´ÏÂÃæÕâ¶Î´úÂ룺

functiona(){
vari=0;
functionb(){alert(++i);}
returnb;
}
varc=a();
c();

Õâ¶Î´úÂëÓÐÁ½¸öÌØµã£º

1¡¢º¯ÊýbǶÌ×ÔÚº¯Êýa**£»

2¡¢º¯Êýa·µ»Øº¯Êýb¡£

ÒýÓùØÏµÈçͼ£º

¡¡¡¡ÕâÑùÔÚÖ´ÐÐÍêvarc=a()ºó£¬±äÁ¿cʵ¼ÊÉÏÊÇÖ¸ÏòÁ˺¯Êýb£¬ÔÙÖ´ÐÐc()ºó¾Í»á³öÒ»¸ö´°¿ÚÏÔʾiµÄÖµ(µÚÒ»´ÎΪ1)¡£Õâ¶Î´úÂëÆäʵ¾Í´´½¨ÁËÒ»¸ö±Õ°ü£¬ÎªÊ²Ã´£¿ÒòΪº¯ÊýaÍâµÄ±äÁ¿cÒýÓÃÁ˺¯ÊýaÄڵĺ¯Êýb£¬¾ÍÊÇ˵£º

¡¡¡¡µ±º¯ÊýaµÄ**º¯Êýb±»º¯ÊýaÍâµÄÒ»¸ö±äÁ¿ÒýÓõÄʱºò£¬¾Í´´½¨ÁËÒ»¸ö±Õ°ü¡£

¡¡¡¡ÈÃÎÒÃÇ˵µÄ¸ü͸³¹Ò»Ð©¡£Ëùν¡°±Õ°ü¡±£¬¾ÍÊÇÔÚ¹¹Ô캯ÊýÌåÄÚ¶¨ÒåÁíÍâµÄº¯Êý×÷ΪĿ±ê¶ÔÏóµÄ·½·¨º¯Êý£¬¶øÕâ¸ö¶ÔÏóµÄ·½·¨º¯Êý·´¹ýÀ´ÒýÓÃÍâ²ãº¯ÊýÌåÖеÄÁÙʱ±äÁ¿¡£ÕâʹµÃֻҪĿ±ê¶ÔÏóÔÚÉú´æÆÚÄÚʼÖÕÄܱ£³ÖÆä·½·¨£¬¾ÍÄܼä½Ó±£³ÖÔ­¹¹Ô캯ÊýÌ嵱ʱÓõ½µÄÁÙʱ±äÁ¿Öµ¡£¾¡¹Ü×ʼµÄ¹¹Ô캯Êýµ÷ÓÃÒѾ­½áÊø£¬ÁÙʱ±äÁ¿µÄÃû³ÆÒ²¶¼ÏûʧÁË£¬µ«ÔÚÄ¿±ê¶ÔÏóµÄ·½·¨ÄÚȴʼÖÕÄÜÒýÓõ½¸Ã±äÁ¿µÄÖµ£¬¶øÇÒ¸ÃÖµÖ»ÄÜͨÕâÖÖ·½·¨À´·ÃÎÊ¡£¼´Ê¹Ôٴε÷ÓÃÏàͬµÄ¹¹Ô캯Êý£¬µ«Ö»»áÉú³ÉжÔÏóºÍ·½·¨£¬ÐµÄÁÙʱ±äÁ¿Ö»ÊǶÔӦеÄÖµ£¬ºÍÉÏ´ÎÄǴε÷ÓõÄÊǸ÷×Ô¶ÀÁ¢µÄ¡£

¶þ¡¢±Õ°üÓÐʲô×÷Óã¿

¡¡¡¡¼ò¶øÑÔÖ®£¬±Õ°üµÄ×÷ÓþÍÊÇÔÚaÖ´ÐÐÍê²¢·µ»Øºó£¬±Õ°üʹµÃJ**ascriptµÄÀ¬»ø»ØÊÕ»úÖÆGC²»»áÊÕ»ØaËùÕ¼ÓõÄ×ÊÔ´£¬ÒòΪaµÄ**º¯ÊýbµÄÖ´ÐÐÐèÒªÒÀÀµaÖеıäÁ¿¡£ÕâÊǶԱհü×÷Óõķdz£Ö±°×µÄÃèÊö£¬²»×¨ÒµÒ²²»ÑϽ÷£¬µ«´ó¸ÅÒâ˼¾ÍÊÇÕâÑù£¬Àí½â±Õ°üÐèҪѭÐò½¥½øµÄ¹ý³Ì¡£

ÔÚÉÏÃæµÄÀý×ÓÖУ¬ÓÉÓÚ±Õ°üµÄ´æÔÚʹµÃº¯Êýa·µ»Øºó£¬aÖеÄiʼÖÕ´æÔÚ£¬ÕâÑùÿ´ÎÖ´ÐÐc()£¬i¶¼ÊÇ×Ô¼Ó1ºóalert³öiµÄÖµ¡£

¡¡¡¡ÄÇôÎÒÃÇÀ´ÏëÏóÁíÒ»ÖÖÇé¿ö£¬Èç¹ûa·µ»ØµÄ²»ÊǺ¯Êýb£¬Çé¿ö¾ÍÍêÈ«²»Í¬ÁË¡£ÒòΪaÖ´ÐÐÍêºó£¬bûÓб»·µ»Ø¸øaµÄÍâ½ç£¬Ö»ÊDZ»aËùÒýÓ㬶ø´ËʱaÒ²Ö»»á±»bÒýÓã¬Òò´Ëº¯ÊýaºÍb»¥ÏàÒýÓõ«ÓÖ²»±»Íâ½ç´òÈÅ(±»Íâ½çÒýÓÃ)£¬º¯ÊýaºÍb¾Í»á±»GC»ØÊÕ¡£(¹ØÓÚJ**ascriptµÄÀ¬»ø»ØÊÕ»úÖÆ½«ÔÚºóÃæÏêϸ½éÉÜ)

Èý¡¢±Õ°üÄÚµÄ΢¹ÛÊÀ½ç

¡¡¡¡Èç¹ûÒª¸ü¼ÓÉîÈëµÄÁ˽â±Õ°üÒÔ¼°º¯ÊýaºÍǶÌ׺¯ÊýbµÄ¹ØÏµ£¬ÎÒÃÇÐèÒªÒýÈëÁíÍ⼸¸ö¸ÅÄº¯ÊýµÄÖ´Ðл·¾³(excutioncontext)¡¢»î¶¯¶ÔÏó(callobject)¡¢×÷ÓÃÓò(scope)¡¢×÷ÓÃÓòÁ´(scopechain)¡£ÒÔº¯Êýa´Ó¶¨Òåµ½Ö´ÐеĹý³ÌΪÀý²ûÊöÕ⼸¸ö¸ÅÄî¡£

µ±¶¨Ò庯ÊýaµÄʱºò£¬js½âÊÍÆ÷»á½«º¯ÊýaµÄ×÷ÓÃÓòÁ´(scopechain)ÉèÖÃΪ¶¨ÒåaʱaËùÔڵġ°»·¾³¡±£¬Èç¹ûaÊÇÒ»¸öÈ«¾Öº¯Êý£¬ÔòscopechainÖÐÖ»ÓÐwindow¶ÔÏó¡£µ±Ö´Ðк¯ÊýaµÄʱºò£¬a»á½øÈëÏàÓ¦µÄÖ´Ðл·¾³(excutioncontext)¡£ÔÚ´´½¨Ö´Ðл·¾³µÄ¹ý³ÌÖУ¬Ê×ÏÈ»áΪaÌí¼ÓÒ»¸öscopeÊôÐÔ£¬¼´aµÄ×÷ÓÃÓò£¬ÆäÖµ¾ÍΪµÚ1²½ÖеÄscopechain¡£¼´a.scope=aµÄ×÷ÓÃÓòÁ´¡£È»ºóÖ´Ðл·¾³»á´´½¨Ò»¸ö»î¶¯¶ÔÏó(callobject)¡£»î¶¯¶ÔÏóÒ²ÊÇÒ»¸öÓµÓÐÊôÐԵĶÔÏ󣬵«Ëü²»¾ßÓÐÔ­ÐͶøÇÒ²»ÄÜͨ¹ýJ**aScript´úÂëÖ±½Ó·ÃÎÊ¡£´´½¨Íê»î¶¯¶ÔÏóºó£¬°Ñ»î¶¯¶ÔÏóÌí¼Óµ½aµÄ×÷ÓÃÓòÁ´µÄ×î¶¥¶Ë¡£´ËʱaµÄ×÷ÓÃÓòÁ´°üº¬ÁËÁ½¸ö¶ÔÏó£ºaµÄ»î¶¯¶ÔÏóºÍwindow¶ÔÏó¡£ÏÂÒ»²½ÊÇÔڻ¶ÔÏóÉÏÌí¼ÓÒ»¸öargumentsÊôÐÔ£¬Ëü±£´æ×ŵ÷Óú¯ÊýaʱËù´«µÝµÄ²ÎÊý¡£×îºó°ÑËùÓк¯ÊýaµÄÐβκÍ**µÄº¯ÊýbµÄÒýÓÃÒ²Ìí¼Óµ½aµÄ»î¶¯¶ÔÏóÉÏ¡£ÔÚÕâÒ»²½ÖУ¬Íê³ÉÁ˺¯ÊýbµÄµÄ¶¨Ò壬Òò´ËÈçͬµÚ3²½£¬º¯ÊýbµÄ×÷ÓÃÓòÁ´±»ÉèÖÃΪbËù±»¶¨ÒåµÄ»·¾³£¬¼´aµÄ×÷ÓÃÓò¡£

µ½´Ë£¬Õû¸öº¯Êýa´Ó¶¨Òåµ½Ö´ÐеIJ½Öè¾ÍÍê³ÉÁË¡£´Ëʱa·µ»Øº¯ÊýbµÄÒýÓøøc£¬ÓÖº¯ÊýbµÄ×÷ÓÃÓòÁ´°üº¬Á˶Ժ¯ÊýaµÄ»î¶¯¶ÔÏóµÄÒýÓã¬Ò²¾ÍÊÇ˵b¿ÉÒÔ·ÃÎʵ½aÖж¨ÒåµÄËùÓбäÁ¿ºÍº¯Êý¡£º¯Êýb±»cÒýÓ㬺¯ÊýbÓÖÒÀÀµº¯Êýa£¬Òò´Ëº¯ÊýaÔÚ·µ»Øºó²»»á±»GC»ØÊÕ¡£

µ±º¯ÊýbÖ´ÐеÄʱºòÒà»áÏñÒÔÉϲ½ÖèÒ»Ñù¡£Òò´Ë£¬Ö´ÐÐʱbµÄ×÷ÓÃÓòÁ´°üº¬ÁË3¸ö¶ÔÏó£ºbµÄ»î¶¯¶ÔÏó¡¢aµÄ»î¶¯¶ÔÏóºÍwindow¶ÔÏó£¬ÈçÏÂͼËùʾ£º

ÈçͼËùʾ£¬µ±ÔÚº¯ÊýbÖзÃÎÊÒ»¸ö±äÁ¿µÄʱºò£¬ËÑË÷˳ÐòÊÇ£º

ÏÈËÑË÷×ÔÉíµÄ»î¶¯¶ÔÏó£¬Èç¹û´æÔÚÔò·µ»Ø£¬Èç¹û²»´æÔÚ½«¼ÌÐøËÑË÷º¯ÊýaµÄ»î¶¯¶ÔÏó£¬ÒÀ´Î²éÕÒ£¬Ö±µ½ÕÒµ½ÎªÖ¹¡£Èç¹ûº¯Êýb´æÔÚprototypeÔ­ÐͶÔÏó£¬ÔòÔÚ²éÕÒÍê×ÔÉíµÄ»î¶¯¶ÔÏóºóÏȲéÕÒ×ÔÉíµÄÔ­ÐͶÔÏó£¬ÔÙ¼ÌÐø²éÕÒ¡£Õâ¾ÍÊÇJ**ascriptÖеıäÁ¿²éÕÒ»úÖÆ¡£Èç¹ûÕû¸ö×÷ÓÃÓòÁ´É϶¼ÎÞ·¨ÕÒµ½£¬Ôò·µ»Øundefined¡£

С½á£¬±¾¶ÎÖÐÌáµ½ÁËÁ½¸öÖØÒªµÄ´ÊÓº¯ÊýµÄ¶¨ÒåÓëÖ´ÐС£ÎÄÖÐÌáµ½º¯ÊýµÄ×÷ÓÃÓòÊÇÔÚ¶¨Ò庯Êýʱºò¾ÍÒѾ­È·¶¨£¬¶ø²»ÊÇÔÚÖ´ÐеÄʱºòÈ·¶¨£¨²Î¿´²½Öè1ºÍ3£©¡£ÓÃÒ»¶Î´úÂëÀ´ËµÃ÷Õâ¸öÎÊÌ⣺

functionf(x){
varg=function(){returnx;}
returng;
}
varh=f(1);
alert(h());

Õâ¶Î´úÂëÖбäÁ¿hÖ¸ÏòÁËfÖеÄÄǸöÄäÃûº¯Êý(ÓÉg·µ»Ø)¡£

¼ÙÉ躯ÊýhµÄ×÷ÓÃÓòÊÇÔÚÖ´ÐÐalert(h())È·¶¨µÄ£¬ÄÇô´ËʱhµÄ×÷ÓÃÓòÁ´ÊÇ£ºhµÄ»î¶¯¶ÔÏó->alertµÄ»î¶¯¶ÔÏó->window¶ÔÏó¡£¼ÙÉ躯ÊýhµÄ×÷ÓÃÓòÊÇÔÚ¶¨Òåʱȷ¶¨µÄ£¬¾ÍÊÇ˵hÖ¸ÏòµÄÄǸöÄäÃûº¯ÊýÔÚ¶¨ÒåµÄʱºò¾ÍÒѾ­È·¶¨ÁË×÷ÓÃÓò¡£ÄÇôÔÚÖ´ÐеÄʱºò£¬hµÄ×÷ÓÃÓòÁ´Îª£ºhµÄ»î¶¯¶ÔÏó->fµÄ»î¶¯¶ÔÏó->window¶ÔÏó¡£

Èç¹ûµÚÒ»ÖÖ¼ÙÉè³ÉÁ¢£¬ÄÇÊä³öÖµ¾ÍÊÇundefined£»Èç¹ûµÚ¶þÖÖ¼ÙÉè³ÉÁ¢£¬Êä³öÖµÔòΪ1¡£

ÔËÐнá¹ûÃ÷Á˵Ú2¸ö¼ÙÉèÊÇÕýÈ·µÄ£¬ËµÃ÷º¯ÊýµÄ×÷ÓÃÓòȷʵÊÇÔÚ¶¨ÒåÕâ¸öº¯ÊýµÄʱºò¾ÍÒѾ­È·¶¨ÁË¡£

ËÄ¡¢±Õ°üµÄÓ¦Óó¡¾°
±£»¤º¯ÊýÄڵıäÁ¿°²È«¡£ÒÔ×ʼµÄÀý×ÓΪÀý£¬º¯ÊýaÖÐiÖ»Óк¯Êýb²ÅÄÜ·ÃÎÊ£¬¶øÎÞ·¨Í¨¹ýÆäËû;¾¶·ÃÎʵ½£¬Òò´Ë±£»¤ÁËiµÄ°²È«ÐÔ¡£

ÔÚÄÚ´æÖÐά³ÖÒ»¸ö±äÁ¿¡£ÒÀÈ»ÈçǰÀý£¬ÓÉÓÚ±Õ°ü£¬º¯ÊýaÖÐiµÄÒ»Ö±´æÔÚÓÚÄÚ´æÖУ¬Òò´Ëÿ´ÎÖ´ÐÐc()£¬¶¼»á¸øi×Ô¼Ó1¡£Í¨¹ý±£»¤±äÁ¿µÄ°²È«ÊµÏÖJS˽ÓÐÊôÐÔºÍ˽Óз½·¨£¨²»Äܱ»Íⲿ·ÃÎÊ£©
˽ÓÐÊôÐԺͷ½·¨ÔÚConstructorÍâÊÇÎÞ·¨±»·ÃÎʵÄ

functionConstructor(){
varthat=this;
varmembername=value;
functionmembername(){}
}

ÒÔÉÏ3µãÊDZհü×î»ù±¾µÄÓ¦Óó¡¾°£¬ºÜ¶à¾­µä°¸Àý¶¼Ô´ÓÚ´Ë¡£

Îå¡¢J**ascriptµÄÀ¬»ø»ØÊÕ»úÖÆ

ÔÚJ**ascriptÖУ¬Èç¹ûÒ»¸ö¶ÔÏó²»ÔÙ±»ÒýÓã¬ÄÇôÕâ¸ö¶ÔÏó¾Í»á±»GC»ØÊÕ¡£Èç¹ûÁ½¸ö¶ÔÏó»¥ÏàÒýÓ㬶ø²»ÔÙ±»µÚ3ÕßËùÒýÓã¬ÄÇôÕâÁ½¸ö»¥ÏàÒýÓõĶÔÏóÒ²»á±»»ØÊÕ¡£ÒòΪº¯Êýa±»bÒýÓã¬bÓÖ±»aÍâµÄcÒýÓã¬Õâ¾ÍÊÇΪʲôº¯ÊýaÖ´Ðк󲻻ᱻ»ØÊÕµÄÔ­Òò¡£

Áù¡¢½áÓï

Àí½âJ**aScriptµÄ±Õ°üÊÇÂõÏò¸ß¼¶JS³ÌÐòÔ±µÄ±Ø¾­Ö®Â·£¬Àí½âÁËÆä½âÊͺÍÔËÐлúÖÆ²ÅÄÜд³ö¸üΪ°²È«ºÍÓÅÑŵĴúÂë¡£