当前位置:编程学习 > JS >>

在JavaScript中使用inline函数的问题

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

我们在JavaScript中编写代码,对于定义函数的语句:
function foo()
{
// TODO: . . .
return x;
}

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

var foo = function()
{
// TODO: . . .
return x;
}

var foo = new Function('{/*todo*/return x;}');

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

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

function TestObject.prototype.Render(doc, id)
{
var span = doc.createElement('SPAN');
span.Object
= this;
this.m_Element = span;

if ( id == "NamedMethod" )
{
span.onclick
= asdf;
}
else
{
span.onclick
= function()
{
var asdf01 = ['a', 's', 'd', 'f'];
var asdf02 = ['a', 's', 'd', 'f'];
var asdf03 = ['a', 's', 'd', 'f'];
var asdf04 = ['a', 's', 'd', 'f'];
var asdf05 = ['a', 's', 'd', 'f'];
var asdf06 = ['a', 's', 'd', 'f'];
var asdf07 = ['a', 's', 'd', 'f'];
var asdf08 =

上一个:使用IE的地址栏来辅助调试Web页脚本
下一个:使用TextRange获取输入框中光标的位置的代码

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,