星期日, 十月 08, 2006

对JavaScript局部变量声明及使用的一些看法

在ms实习时碰见的一个问题,很老了,放在这里吧~~ ...

对于昨日一个局部变量、局部函数问题的看法:
建议:不使用局部变量、局部函数,所有变量、函数都明显的使用this指针
function test_t()
{
var v = 4 ;
this.m = function()
{
w() ;
alert( v ) ;
}

w = function()
{
v+=2 ;
alert( v ) ;
}
}

function start()
{
f = new test_t() ;
// t = new test_t() ; //(*)
f.m() ;
}
上面这段代码,输出6,6,这是正确的,但是,现在我们把(*)句处的注释去掉,则会输出6,4!这非常奇怪!

仔细分析一下,是由于在生成对象t的时候,重置了test_t()中的v为4了,故而this.m()中的v是重置后的v,而w()中的v却还是重置前的v

这说明在this.m中另生成了一个v,而这个v是各对象独有的,而m()中的v却是各对象共有的,这会使整个代码理解起来非常混乱,稍不注意就会分不清哪个函数中的变量是独有的,而哪个函数中的变量是共有的~~

因此,建议类中的任何东东必须显示的使用this,不要使用不属于对像的东东,使用任何东东的时候都必须显示的指明它属于什么对象(或作用域)

1 条评论:

匿名 说...

这个类表现奇特,问题出在这里:
w = function()
{
v+=2;
alert(v);
}

原理这里有说道:
http://www.cnblogs.com/birdshome/archive/2005/01/26/97885.html

方法w在第一次new test_t()执行后,实际上是window.w了。所以出了你看到的异像:)