在JavaScript中使用inline函数的问题
在JavaScript中使用inline函数的问题
发布时间:2016-12-30 来源:查字典编辑
摘要:前段时间被IE和JavaScript脚本引擎的MemoryLeak问题弄得郁闷坏了,不过幸好现在总算是柳暗花明了,并且找到了一些IE中使用脚...

前段时间被IE和JavaScript脚本引擎的Memory Leak问题弄得郁闷坏了,不过幸好现在总算是柳暗花明了,并且找到了一些IE中使用脚本避免ML问题的方法。继续研究JavaScript的编写,有发现一些不算ML问题,但是可以节约IE内存使用的方法,在此和大家讨论讨论。

我们在JavaScript中编写代码,对于定义函数的语句: 在JavaScript中使用inline函数的问题1functionfoo()

在JavaScript中使用inline函数的问题1{

在JavaScript中使用inline函数的问题1//TODO: . . .

在JavaScript中使用inline函数的问题1returnx;

在JavaScript中使用inline函数的问题1}

可以说是在熟悉不过了。当然除了这种定义函数的方法,我们还有另外几种方法也能定义函数:

在JavaScript中使用inline函数的问题1varfoo=function()

在JavaScript中使用inline函数的问题1{

在JavaScript中使用inline函数的问题1//TODO:. . .

在JavaScript中使用inline函数的问题1returnx;

在JavaScript中使用inline函数的问题1}

在JavaScript中使用inline函数的问题1varfoo=newFunction('{/*todo*/returnx;}');

后两种方法定义的JavaScript函数,在调用起来和第一种没有任何效果上的区别。

不过由于JavaScript是解释性语言,当我们定义一个函数的时候,解析引擎生成一个Function对象实例,然后把函数内容保存下来。所以每执行一次函数定义语句,就会生成一个函数。而不像编译语言,一个函数编译一次后就被任何语句调用。啊?难道JavaScript不能调用定义好的函数?不是这个意思了,当我们在制作JavaScript控件时,如果动态输出DHTML来作为控件的内容,就容易出现这样的问题。比如我们在一个HTML对象生成过程中,使用了inline方式定义的函数,那么这个元素生成几次,那个函数也就要同时生成几次。

在JavaScript中使用inline函数的问题1functionTestObject.prototype.Render(doc,id)

在JavaScript中使用inline函数的问题1{

在JavaScript中使用inline函数的问题1varspan=doc.createElement('SPAN');

在JavaScript中使用inline函数的问题1span.Object=this;

在JavaScript中使用inline函数的问题1this.m_Element=span;

在JavaScript中使用inline函数的问题1

在JavaScript中使用inline函数的问题1if(id=="NamedMethod")

在JavaScript中使用inline函数的问题1{

在JavaScript中使用inline函数的问题1 span.onclick=asdf;

在JavaScript中使用inline函数的问题1}

在JavaScript中使用inline函数的问题1else

在JavaScript中使用inline函数的问题1{

在JavaScript中使用inline函数的问题1span.onclick=function()

在JavaScript中使用inline函数的问题1{

在JavaScript中使用inline函数的问题1varasdf01=['a','s','d','f'];

在JavaScript中使用inline函数的问题1varasdf02=['a','s','d','f'];

在JavaScript中使用inline函数的问题1varasdf03=['a','s','d','f'];

在JavaScript中使用inline函数的问题1varasdf04=['a','s','d','f'];

在JavaScript中使用inline函数的问题1varasdf05=['a','s','d','f'];

在JavaScript中使用inline函数的问题1varasdf06=['a','s','d','f'];

在JavaScript中使用inline函数的问题1varasdf07=['a','s','d','f'];

在JavaScript中使用inline函数的问题1varasdf08=['a','s','d','f'];

在JavaScript中使用inline函数的问题1varasdf09=['a','s','d','f'];

在JavaScript中使用inline函数的问题1varasdf10=['a','s','d','f'];

在JavaScript中使用inline函数的问题1varasdf11=['a','s','d','f'];

在JavaScript中使用inline函数的问题1varasdf12=['a','s','d','f'];

在JavaScript中使用inline函数的问题1};

在JavaScript中使用inline函数的问题1}

在JavaScript中使用inline函数的问题1span.Name=this.m_Description;

在JavaScript中使用inline函数的问题1span.innerText=this.m_Name;

在JavaScript中使用inline函数的问题1span.style.display='block';

在JavaScript中使用inline函数的问题1returnspan;

在JavaScript中使用inline函数的问题1}

函数span.onclick = function()中的内容是用来占位置的,这样inline方式定义函数,每次Render()都就会生成一个新的函数对象。使用inline方式有什么不好呢?当对象实例多了的时候,会很明显的浪费内存空间呀,试验数据如下:

Normal Method Inline Method
Initialized 27.4M 27.4M
Rendered 33.4M 35.2 M

// IE消耗的内存数量(PM+VM)

单看绝对内存消耗差别不大,可是如果看相对内存消耗:(35.2-33.4)/(33.4-27.4) = 30% !!!,还是很可观的了,而且如果方法本省越大,inline时冗余数据就越多。

附测试代码: 在JavaScript中使用inline函数的问题1<html>

在JavaScript中使用inline函数的问题1<head>

在JavaScript中使用inline函数的问题1<title>JScriptFunctionSpending</title>

在JavaScript中使用inline函数的问题1<metaname="author"content="birdshome@博客园"/>

在JavaScript中使用inline函数的问题1</head>

在JavaScript中使用inline函数的问题1<bodyonunload="ReleaseElements()">

在JavaScript中使用inline函数的问题1<buttonid="NamedMethod"onclick="GenerateObjects(this)">

在JavaScript中使用inline函数的问题1AppendNormalElements</button>

在JavaScript中使用inline函数的问题1<buttonid="AnonymousMethod"onclick="GenerateObjects(this)">

在JavaScript中使用inline函数的问题1AppendInlineElements</button>

在JavaScript中使用inline函数的问题1<divid="container">

在JavaScript中使用inline函数的问题1</div>

在JavaScript中使用inline函数的问题2在JavaScript中使用inline函数的问题3<scriptlanguage="Javascript">在JavaScript中使用inline函数的问题4

在JavaScript中使用inline函数的问题5functionGenerateObjects(elmt)

在JavaScript中使用inline函数的问题6在JavaScript中使用inline函数的问题7在JavaScript中使用inline函数的问题4{

在JavaScript中使用inline函数的问题5varroom=document.getElementById('container');

在JavaScript中使用inline函数的问题5for(vari=0;i<1000;++i)

在JavaScript中使用inline函数的问题6在JavaScript中使用inline函数的问题7在JavaScript中使用inline函数的问题4{

在JavaScript中使用inline函数的问题5varobj=newTestObject('__Object__'+i);

在JavaScript中使用inline函数的问题5room.appendChild(obj.Render(document,elmt.id));

在JavaScript中使用inline函数的问题8}

在JavaScript中使用inline函数的问题8}

在JavaScript中使用inline函数的问题5

在JavaScript中使用inline函数的问题5functionTestObject(name)

在JavaScript中使用inline函数的问题6在JavaScript中使用inline函数的问题7在JavaScript中使用inline函数的问题4{

在JavaScript中使用inline函数的问题5this.m_Name=name;

在JavaScript中使用inline函数的问题5this.m_Description='';

在JavaScript中使用inline函数的问题5this.m_Element=null;

在JavaScript中使用inline函数的问题5

在JavaScript中使用inline函数的问题5this.toString=function()

在JavaScript中使用inline函数的问题6在JavaScript中使用inline函数的问题7在JavaScript中使用inline函数的问题4{

在JavaScript中使用inline函数的问题5return'[classTestObject]';

在JavaScript中使用inline函数的问题8}

在JavaScript中使用inline函数的问题8}

在JavaScript中使用inline函数的问题5

在JavaScript中使用inline函数的问题5functionTestObject.prototype.Render(doc,id)

在JavaScript中使用inline函数的问题6在JavaScript中使用inline函数的问题7在JavaScript中使用inline函数的问题4{

在JavaScript中使用inline函数的问题5varspan=doc.createElement('SPAN');

在JavaScript中使用inline函数的问题5span.Object=this;

在JavaScript中使用inline函数的问题5this.m_Element=span;

在JavaScript中使用inline函数的问题5

在JavaScript中使用inline函数的问题5if(id=="NamedMethod")

在JavaScript中使用inline函数的问题6在JavaScript中使用inline函数的问题7在JavaScript中使用inline函数的问题4{

在JavaScript中使用inline函数的问题5span.onclick=asdf;

在JavaScript中使用inline函数的问题8}

在JavaScript中使用inline函数的问题5else

在JavaScript中使用inline函数的问题6在JavaScript中使用inline函数的问题7在JavaScript中使用inline函数的问题4{

在JavaScript中使用inline函数的问题5span.onclick=function()

在JavaScript中使用inline函数的问题6在JavaScript中使用inline函数的问题7在JavaScript中使用inline函数的问题4{

在JavaScript中使用inline函数的问题5varasdf01=['a','s','d','f'];

在JavaScript中使用inline函数的问题5varasdf02=['a','s','d','f'];

在JavaScript中使用inline函数的问题5varasdf03=['a','s','d','f'];

在JavaScript中使用inline函数的问题5varasdf04=['a','s','d','f'];

在JavaScript中使用inline函数的问题5varasdf05=['a','s','d','f'];

在JavaScript中使用inline函数的问题5varasdf06=['a','s','d','f'];

在JavaScript中使用inline函数的问题5varasdf07=['a','s','d','f'];

在JavaScript中使用inline函数的问题5varasdf08=['a','s','d','f'];

在JavaScript中使用inline函数的问题5varasdf09=['a','s','d','f'];

在JavaScript中使用inline函数的问题5varasdf10=['a','s','d','f'];

在JavaScript中使用inline函数的问题5varasdf11=['a','s','d','f'];

在JavaScript中使用inline函数的问题5varasdf12=['a','s','d','f'];

在JavaScript中使用inline函数的问题8};

在JavaScript中使用inline函数的问题8}

在JavaScript中使用inline函数的问题5span.Name=this.m_Description;

在JavaScript中使用inline函数的问题5span.innerText=this.m_Name;

在JavaScript中使用inline函数的问题5span.style.display='block';

在JavaScript中使用inline函数的问题5returnspan;

在JavaScript中使用inline函数的问题8}

在JavaScript中使用inline函数的问题5

在JavaScript中使用inline函数的问题5functionasdf()

在JavaScript中使用inline函数的问题6在JavaScript中使用inline函数的问题7在JavaScript中使用inline函数的问题4{

在JavaScript中使用inline函数的问题5varasdf01=['a','s','d','f'];

在JavaScript中使用inline函数的问题5varasdf02=['a','s','d','f'];

在JavaScript中使用inline函数的问题5varasdf03=['a','s','d','f'];

在JavaScript中使用inline函数的问题5varasdf04=['a','s','d','f'];

在JavaScript中使用inline函数的问题5varasdf05=['a','s','d','f'];

在JavaScript中使用inline函数的问题5varasdf06=['a','s','d','f'];

在JavaScript中使用inline函数的问题5varasdf07=['a','s','d','f'];

在JavaScript中使用inline函数的问题5varasdf08=['a','s','d','f'];

在JavaScript中使用inline函数的问题5varasdf09=['a','s','d','f'];

在JavaScript中使用inline函数的问题5varasdf10=['a','s','d','f'];

在JavaScript中使用inline函数的问题5varasdf11=['a','s','d','f'];

在JavaScript中使用inline函数的问题5varasdf12=['a','s','d','f'];

在JavaScript中使用inline函数的问题9}

在JavaScript中使用inline函数的问题1</script>

在JavaScript中使用inline函数的问题2在JavaScript中使用inline函数的问题3<scriptlanguage="javascript">在JavaScript中使用inline函数的问题4

在JavaScript中使用inline函数的问题5functionReleaseElements()

在JavaScript中使用inline函数的问题6在JavaScript中使用inline函数的问题7在JavaScript中使用inline函数的问题4{

在JavaScript中使用inline函数的问题5varroom=document.getElementById('container');

在JavaScript中使用inline函数的问题5varspans=room.all.tags('SPAN');

在JavaScript中使用inline函数的问题5for(vari=0;i<spans.length;++i)

在JavaScript中使用inline函数的问题6在JavaScript中使用inline函数的问题7在JavaScript中使用inline函数的问题4{

在JavaScript中使用inline函数的问题5spans[i].Object='';

在JavaScript中使用inline函数的问题8}

在JavaScript中使用inline函数的问题9}

在JavaScript中使用inline函数的问题1</script>

在JavaScript中使用inline函数的问题1</body>

在JavaScript中使用inline函数的问题1</html>

在JavaScript中使用inline函数的问题1

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类