Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
JavascriptÄÚ´æÐ¹Â©
 
»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-11-20
  2193  次浏览      27
 

1.ʲôÊÇÄÚ´æÐ¹Â©£¿

ÄÚ´æÐ¹Â©ÊÇÖ¸·ÖÅ䏸ӦÓõÄÄÚ´æ²»Äܱ»ÖØÐ·ÖÅ䣬¼´Ê¹ÔÚÄÚ´æÒѾ­²»±»Ê¹ÓõÄʱºò¡£Õý³£Çé¿öÏ£¬À¬»ø»ØÊÕÆ÷ÔÚDOMÔªËØºÍevent´¦ÀíÆ÷²»±»ÒýÓûò·ÃÎʵÄʱºò»ØÊÕËüÃÇ¡£µ«ÊÇ£¬IEµÄÔçЩ°æ±¾£¨IE7ºÍ֮ǰ£©ÖÐÄÚ´æÐ¹Â©ÊǺÜÈÝÒ׳öÏֵģ¬ÒòΪÄÚ´æ¹ÜÀíÆ÷²»ÄÜÕýÈ·Àí½âJavascriptÉúÃüÖÜÆÚ¶øÇÒÔÚÖÜÆÚ±»´òÆÆ(¿ÉÒÔͨ¹ý¸³ÖµÎªnullʵÏÖ)ǰ²»»á»ØÊÕÄÚ´æ¡£

2.ΪʲôÄãÐèҪעÒâËü£¿

ÔÚ´óÐÍWebÓ¦ÓóÌÐòÖÐÄÚ´æÐ¹Â©ÊÇÒ»ÖÖ³£¼ûµÄÒâÍâ±à³Ì´íÎó¡£ÄÚ´æÐ¹Â©»á½µµÍWebÓ¦ÓóÌÐòµÄÐÔÄÜ£¬Ö±µ½À˷ѵÄÄڴ泬¹ýÁËϵͳËùÄÜ·ÖÅäµÄ£¬Ó¦ÓóÌÐò½«²»ÄÜʹÓá£×÷ΪһWeb¿ª·¢Õߣ¬¿ª·¢Ò»¸öÂú×㹦ÄÜÒªÇóµÄÓ¦ÓóÌÐòÖ»ÊǵÚÒ»²½£¬ÐÔÄÜÒªÇóºÍWebÓ¦ÓóÌÐòµÄ³É¹¦ÊÇͬÑùÖØÒªµÄ£¬¸üºÎ¿öËü¿ÉÄܻᵼÖÂÓ¦ÓóÌÐò´íÎó»òä¯ÀÀÆ÷±ÀÀ£¡£

3.JavascriptÖгöÏÖÄÚ´æÐ¹Â©µÄÖ÷ÒªÔ­ÒòÊÇʲô£¿

1)Ñ­»·ÒýÓÃ

Ò»¸öºÜ¼òµ¥µÄÀý×Ó£ºÒ»¸öDOM¶ÔÏó±»Ò»¸öJavascript¶ÔÏóÒýÓã¬Óë´ËͬʱÓÖÒýÓÃͬһ¸ö»òÆäËüµÄJavascript¶ÔÏó£¬Õâ¸öDOM¶ÔÏó¿ÉÄÜ»áÒý·¢ÄÚ´æÐ¹Â©¡£Õâ¸öDOM¶ÔÏóµÄÒýÓý«²»»áÔڽű¾Í£Ö¹µÄʱºò±»À¬»ø»ØÊÕÆ÷»ØÊÕ¡£ÒªÏëÆÆ»µÑ­»·ÒýÓã¬ÒýÓÃDOMÔªËØµÄ¶ÔÏó»òDOM¶ÔÏóµÄÒýÓÃÐèÒª±»¸³ÖµÎªnull¡£

2)Javascript±Õ°ü

ÒòΪJavascript·¶Î§µÄÏÞÖÆ£¬Ðí¶àʵÏÖÒÀÀµJavascript²»°ü£¬Çë²é¿´ÎÒµÄÇ°ÃæµÄÎÄÕÂJavaScript Scope and ClosureÈç¹ûÄãÏëÁ˽â¸ü¶à±Õ°ü·½ÃæµÄÎÊÌâ¡£

±Õ°ü¿ÉÒÔµ¼ÖÂÄÚ´æÐ¹Â©ÊÇÒòΪÄÚ²¿·½·¨±£³ÖÒ»¸ö¶ÔÍⲿ·½·¨±äÁ¿µÄÒýÓã¬ËùÒÔ¾¡¹Ü·½·¨·µ»ØÁËÄÚ²¿·½·¨»¹¿ÉÒÔ¼ÌÐø·ÃÎÊÔÚÍⲿ·½·¨Öж¨ÒåµÄ˽ÓбäÁ¿¡£¶ÔJavascript³ÌÐòÔ±À´Ëµ×îºÃµÄ×ö·¨ÊÇÔÚÒ³ÃæÖØÔØÇ°¶Ï¿ªËùÓеÄʼþ´¦ÀíÆ÷¡£

3)DOM²åÈë˳Ðò

µ±2¸ö²»Í¬·¶Î§µÄ DOM ¶ÔÏóÁ¬Ìí¼Óµ½Ò»ÆðµÄʱºòÒ»¸öÁÙʱµÄ¶ÔÏó»á±»´´½¨¡£Õâ¸öDOM¶ÔÏó¸Ä±ä·¶Î§µ½documentʱ£¬ÄǸöÁÙʱ¶ÔÏó¾ÍûÓÃÁË¡£Ò²¾ÍÊÇ˵£¬ DOM ¶ÔÏóÓ¦¸Ã°´ÕÕ´Óµ±Ç°Ò³Ãæ´æÔÚµÄ×îÉÏÃæµÄ DOM ÔªËØ¿ªÊ¼ÍùÏÂÖ±µ½Ê£Ï嵀 DOM ÔªËØµÄ˳ÐòÌí¼Ó£¬ÕâÑùËüÃǾÍ×ÜÊÇÓÐͬÑùµÄ·¶Î§£¬²»»á²úÉúÁÙʱ¶ÔÏó¡£

4)ÈçºÎ¼ì²â£¿

ÄÚ´æÐ¹Â©¶Ô¿ª·¢ÕßÀ´ËµÒ»°ãºÜÄѼì²âÒòΪËüÃÇÊÇÓÉһЩ´óÁ¿´úÂëÖеÄÒâÍâµÄ´íÎóÒýÆðµÄ£¬µ«ËüÔÚϵͳÄÚ´æ²»×ãǰ²¢²»Ó°Ïì³ÌÐòµÄ¹¦ÄÜ¡£Õâ¾ÍÊÇΪʲô»áÓÐÈËÔںܳ¤Ê±¼äµÄ²âÊÔÆÚÖÐÊÕ¼¯Ó¦ÓóÌÐòÐÔÄÜÖ¸±êÀ´²âÊÔÐÔÄÜ¡£

×î¼òµ¥µÄ¼ì²âÄÚ´æÐ¹Â©µÄ·½Ê½ÊÇÓÃÈÎÎñ¹ÜÀíÆ÷¼ì²éÄÚ´æÊ¹ÓÃÇé¿ö¡£ÔÚChromeä¯ÀÀÆ÷µÄÐÂÑ¡ÏÖдò¿ªÓ¦Óò¢²é¿´ÄÚ´æÊ¹ÓÃÁ¿ÊDz»ÊÇÔ½À´Ô½¶à¡£»¹ÓÐÆäËûµÄµ÷ÊÔ¹¤¾ßÌṩÄÚ´æ¼àÊÓÆ÷£¬±ÈÈçChrome¿ª·¢Õß¹¤¾ß¡£ÕâÊǹȸ迪ÕßÕâÍøÕ¾ÖеĶѷÖÎöµÄÌØÐԵĽ̡̳£

4¡¢ÄÚ´æÐ¹Â¶Quick View

²»Í¬µÄä¯ÀÀÆ÷ÖдæÔÚ¸÷ÖÖÄÚ´æÐ¹Â¶·½Ê½£¬Ä¿Ç°·¢ÏÖµÄÖ÷ÒªÊÇÕâÑù¼¸ÖÖ£º

1. Ñ­»·ÒýÓÃ

ÒѾ­È·ÈÏ´æÔÚй©µÄä¯ÀÀÆ÷£ºIE6.0 FF2.0

º¬ÓÐDOM¶ÔÏóµÄÑ­»·ÒýÓý«µ¼Ö´󲿷ֵ±Ç°Ö÷Á÷ä¯ÀÀÆ÷ÄÚ´æÐ¹Â¶ ÕâÀïÓÐÁ½¸ö¼òµ¥µÄ¸ÅÄî

ÒýÓãºa.ÊôÐÔ=b£¬a¾ÍÒýÓÃÁËb

Ñ­»·ÒýÓ㺼òµ¥À´Ëµ¼ÙÈçaÒýÓÃÁËb,bÓÖÒýÓÃÁËa,aºÍb¾Í¹¹³ÉÁËÑ­»·ÒýÓá£

aºÍbÑ­»·ÒýÓãº

var a=new Object;
var b=new Object;
a.r=b;
b.r=a;

aÑ­»·ÒýÓÃ×Ô¼º£º

var a=new Object;
a.r=a;

Ñ­»·ÒýÓúܳ£¼ûÇҴ󲿷ÖÇé¿öÏÂÊÇÎÞº¦µÄ£¬µ«µ±²ÎÓëÑ­»·ÒýÓõĶÔÏóÖÐÓÐDOM¶ÔÏó»òÕßActiveX¶ÔÏóʱ£¬Ñ­»·ÒýÓý«µ¼ÖÂÄÚ´æÐ¹Â¶¡£ÎÒÃǰÑÀý×ÓÖеÄÈκÎÒ»¸önew ObjectÌæ»»³Édocument.getElementById»òÕßdocument.createElement¾Í»á·¢ÉúÄÚ´æÐ¹Â¶ÁË¡£

¾¡¹ÜÕâ¿´ÆðÀ´·Ç³£ÈÝÒ×Àí½â£¬µ«ÊÇÒòΪÓÐclosureµÄ²ÎÓë¶øÊ¹ÊÂÇé±äµÃ¸´ÔÓ£¬ÓÐЩclosureµ¼ÖµÄÑ­»·ÒýÓúÜÄѱ»²ì¾õ¡£ÏÂÃæÊÇÒ»¸ö·Ç³£³£¼ûµÄ¶¯Ì¬°ó¶¨Ê¼þ£º

function bindEvent()
{
var obj=document.createElement("XXX");
obj.onclick=function(){
//Even if it's a empty function
}
}

Õâ¸öbindEventÖ´ÐÐʱ100%»á·¢ÉúÄÚ´æÐ¹Â¶£¬Someone ¿ÉÄÜ»áÎÊ£¬ÄÄÀï³öÏÖÁËÑ­»·ÒýÓÃ? ¹ØÓÚclosureºÍscope chain²ÎÓëµÄÑ­»·ÒýÓñȽϸ´ÔÓ£¬´Ë´¦Ôݲ»ÉîÈëÌÖÂÛ¡£ÓÐÒ»¸ö¼òµ¥µÄÅжϷ½Ê½£ºº¯Êý½«¼ä½ÓÒýÓÃËùÓÐËüÄÜ·ÃÎʵĶÔÏó¡£obj.onclickÕâ¸öº¯ÊýÖÐ ¿ÉÒÔ·ÃÎÊÍⲿµÄ±äÁ¿obj ËùÒÔËûÒýÓÃÁËobj,¶øobjÓÖÒýÓÃÁËËü£¬Òò´ËÕâ¸öʼþ°ó¶¨½«»áÔì³ÉÄÚ´æÐ¹Â¶¡£ÔÚIBMµÄÎÄÕÂÖнéÉÜÁË2ÖÖ·½Ê½½â¾öÀàËÆµÄÎÊÌâÒ»¸öÊÇobj=null£¬ÁíÒ»¸öÊǰÑonclickµÄº¯ÊýдÔÚbindEventÍâ£¬ÖØ¸´È˼ҵÄÎҾͲ»ËµÁË¡£¼òµ¥ÌùÏ´úÂ룺

function bindEvent()
{
var obj=document.createElement("XXX");
obj.onclick=onclickHandler;
}
function onclickHandler(){
//do something
}
function bindEvent()
{
var obj=document.createElement("XXX");
obj.onclick=function(){
//Even if it's a empty function
}
obj=null;
}

ÕâÁ½¸ö·½·¨¶¼´ò¶ÏÁËÑ­»·ÒýÓ㬿ÉÒÔ½â¾öÎÊÌ⣬µ«ÊÇËÆºõ¶Ô´úÂë±í´ïÄÜÁ¦Ôì³ÉÁËÒ»¶¨ÆÆ»µ£¬¼ÙÉèÓÐÕâôһ¸öÎÊÌ⣺

function bindEvent()
{
var obj=document.createElement("XXX");
var var0="OOXX";//Here is a variable
obj.onclick=function(){
alert(var0);//I want to visit var2 here!
}
return obj;//bindEvent must return obj!
}

ºÃÁË£¬ÕâÏÂÁ½ÖÖ°ì·¨¶¼²»ÐÐÁË£¬¼ÙÈçÎҰѺ¯ÊýдÍâÃæÈ¥£¬var0¿Ï¶¨·ÃÎʲ»ÁË£¬¼ÙÈçÎÒ°ÑobjŪ³Énull£¬»¹ÔõôreturnËüÄØ£¿Õâ²¢²»ÊÇ¿ÕÏëµÄÐèÒª£¬Õâʵ¼Ê ÉÏÊÇÒ»¸öÓÃJS¶¨ÖÆDOM¿Ø¼þµÄ¼òµ¥³éÏ󣺴´½¨DOMÔªËØ¡¢ÉèÖÃ˽ÓÐÊôÐÔ¡¢°ó¶¨Ê¼þ¡£ËùÒÔ£¬ÎÒÃDZØÐëupdateÒ»ÏÂÁ½¸ö·½·¨¡£Ê×ÏÈ£¬·½·¨1£¬ÎªÁËÈú¯Êý ÄÜ·ÃÎÊijЩ±äÁ¿£¬ÎÒÃÇ¿ÉÒÔͨ¹ýÒ»¸öBuilderº¯ÊýÀ´¶©ÖÆonclickµÄÍⲿ±Õ°ü£º

function bindEvent()
{
var obj=document.createElement("XXX");
var var0="OOXX";//Here is a variable
obj.onclick= onclickBuilder(var0);//Ïë·ÃÎÊË­¾Í°ÑË­´«½øÈ¥£¡£¡
return obj;//bindEvent must return obj!
}
function onclickBuilder(var0)//ÕâÀï¸úÉÏÃæ¶ÔÓ¦ÉϾÍÐÐÁË ×îºÃ²ÎÊýÃû×ÖÒ²¶ÔÓ¦ÉÏ
{
return function(){
alert(var0);
}
}

µÚ¶þ¸ö°ì·¨£¬Õâ¸öÀ´×Ô51jsµÄchpnͬѧ£¬ÈÃobj=nullÔÚreturn Ö®ºóÖ´ÐУ¡£¡

function bindEvent()
{
try{
var obj=document.createElement("XXX");
var var0="OOXX";//Here is a variable
obj.onclick=function(){
alert(var0);//I want to visit var2 here!
}
return obj;//bindEvent must return obj!
} finally {
obj=null;
}
}

2. ijЩDOM²Ù×÷

ÕâÊÇIEϵÁеÄÌØÓÐÎÊÌâ ¼òµ¥µÄÀ´Ëµ¾ÍÊÇÔÚÏò²»ÔÚDOMÊ÷ÉϵÄDOMÔªËØappendChild£¬¿ÉÄܻᷢÉúÄÚ´æÐ¹Â¶£¨Ö»ÊÇ¿ÉÄÜ£¬¾ßÌåÔ­Òò²»Ã÷£¬ËƺõÊ®·Ö¸´ÔÓ£¬ÏÂÃæÀý×ÓÖÐÈ¥µôonClickÒ²¿ÉÒÔ±ÜÃâй¶£©¡£ËùÒÔappendChildµÄ˳Ðò¿ÉÄÜÓ°ÏìÄÚ´æÐ¹Â¶£¬À´×Ô΢ÈíµÄÀý×Ó£º

</html>

<head>

<script language="JScript">

function LeakMemory()

{

var hostElement = document.getElementById("hostElement");

// Do it a lot, look at Task Manager for memory response

for(i = 0; i < 5000; i++)

{

var parentDiv =

document.createElement("<div onClick='foo()'>");

var childDiv =

document.createElement("<div onClick='foo()'>");

// This will leak a temporary object

parentDiv.appendChild(childDiv);

hostElement.appendChild(parentDiv);

hostElement.removeChild(parentDiv);

parentDiv.removeChild(childDiv);

parentDiv = null;

childDiv = null;

}

hostElement = null;

}

function CleanMemory()

{

var hostElement = document.getElementById("hostElement");

// Do it a lot, look at Task Manager for memory response

for(i = 0; i < 5000; i++)

{

var parentDiv =

document.createElement("<div onClick='foo()'>");

var childDiv =

document.createElement("<div onClick='foo()'>");

// Changing the order is important, this won't leak

hostElement.appendChild(parentDiv);

parentDiv.appendChild(childDiv);

hostElement.removeChild(parentDiv);

parentDiv.removeChild(childDiv);

parentDiv = null;

childDiv = null;

}

hostElement = null;

}

</script>

</head>

<body>

<button onclick="LeakMemory()">Memory Leaking Insert</button>

<button onclick="CleanMemory()">Clean Insert</button>

<div id="hostElement"></div>

</body>

</html>

¶øÔÚIE7ÖУ¬Ã²ËÆÎªÁ˸ÄÉÆÄÚ´æÐ¹Â¶£¬IE7²ÉÓÃÁ˼«¶ËµÄ½â¾ö·½°¸£ºÀë¿ªÒ³ÃæÊ±»ØÊÕËùÓÐDOMÊ÷ÉϵÄÔªËØ£¬ÆäËüÒ»¸Å²»¹Ü¡£µ«ÊÇÕâ²»½öûÆðµ½ÈκÎ×÷Ó㬷´¶ø ʹÎÊÌâ±äµÃ¸ü¼Ó¸´ÔÓ¡£¶ÔÕâÀàÎÊÌ⣬³ýÁË×Ô¾õÒ»µãÈÆ¿ªÕâЩ¶ñÐĵĶ«Î÷£¬¶àÓÃinnerHTMLÕâÖÖÎÞÓõĽ¨ÒéÖ®Íâ¡£ÎÒÏë¿ÉÒÔͨ¹ý¸²¸Ç document.createElementÀ´ÂÔΪ¸ÄÉÆ£º

Ê×ÏÈÎÒÃǶ¨ÒåÒ»¸ö¿´²»¼ûµÄÔªËØµ±×÷À¬»øÏ䣬ËùÓÐд´½¨µÄÔªËØ¶¼ÈÓ½øÀ¬»øÏäÀÕâÑù±£Ö¤ÁËËùÓÐDOMÔªËØ¶¼ÔÚDOMÊ÷ÉÏ£¬IE7¾Í¿ÉÒÔÕýÈ·»ØÊÕÁË£¬ÁíÒ»·½ÃæÒ²ÄܱÜÃâËùνµÄ¡±appendChild˳Ðò²»¶Ôµ¼ÖÂÄÚ´æÐ¹Â¶¡±¡£

function MemoryFix(){

var garbageBox=document.createElement("div");

garbageBox.style.display="none";

document.body.appendChild(garbageBox);

var createElement=document.createElement;

document.createElement=function(){

var obj=Function.prototype.apply.apply(createElement,[document,arguments]);

garbageBox.appendChild(obj);

return obj;

}

}

3. ×Ô¶¯ÀàÐÍ×°Ïäת»»

±ð²»ÏàÐÅ£¬ÏÂÃæµÄ´úÂëÔÚieϵÁÐÖлᵼÖÂÄÚ´æÐ¹Â¶

var s=¡±lalala¡±;
alert(s.length);

s±¾ÉíÊÇÒ»¸östring¶ø·Çobject£¬ËüûÓÐlengthÊôÐÔ£¬ËùÒÔµ±·ÃÎÊlengthʱ£¬JSÒýÇæ»á×Ô¶¯´´½¨Ò»¸öÁÙʱString¶ÔÏó·â×°s£¬¶øÕâ¸ö¶ÔÏóÒ»¶¨»áй¶¡£Õâ¸öbug·ËÒÄËù˼£¬ËùÐÒ½â¾öÆðÀ´Ï൱ÈÝÒ×£¬¼ÇµÃËùÓÐÖµÀàÐÍ×ö.ÔËËã֮ǰÏÈÏÔʽת»»Ò»Ï£º

var s="lalala";
alert(new String(s).length);
   
2193 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕ Ïà¹ØÎĵµ Ïà¹Ø¿Î³Ì



Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Àí½âJavascript
·ÇµäÐÍajaxʵ¼ù
³¹µ×µÄAjax
javascript ʹÓÃCookies
ʹÓà jQuery ¼ò»¯ Ajax ¿ª·¢


Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ


ijº½¿Õ¹«Ë¾IT²¿ JavaScriptʵ¼ù
ijµçÊÓÈí¼þ HTML5ºÍJavaScript
Öк½ÐÅ JavaScript¸ß¼¶Ó¦Óÿª·¢
´óÇìÓÍÌï web½çÃæAjax¿ª·¢¼¼Êõ
ºÍÀûʱ ʹÓÃAJAX½øÐÐWEBÓ¦Óÿª·¢