日期:2014-05-16  浏览次数:20436 次

高手来吧,代码很简单但问题很严重
JScript code

alert(hclick);
if(typeof(hclick) != "undefined"){
alert(hclick);
hclick();
}


环境:JQuery1.62 IE8 FireFox最新版 

hclick是一个变量,在调用上面那段代码前,我已经将一个函数名赋予该变量。大家看见了,有两个alert,第一个alert弹出来的是"undefined"。第二个alert则弹出了那个函数的代码。而如果我将上面那个判断语句去掉,那么两个alert都将弹出"undefined"

我试图建一个简单的示例来重现这个错误,但可惜的是,它只发生在我的工程代码里。我的工程代码是基于jquery1.62的,在我工程里,建立对象后就给hclick赋值了,而调用hclick则发生在document.ready回调函数里。我测了下,顺序是正确的,先赋值,后调用。但还是发生了这个诡异的问题。

说的再具体些,我的hclick在工程中是包装在function伪类中的(JS没有类,但可以用函数来模拟)我隐约感觉到:JS在新建function对象后,就算你给对象中的成员赋了值,但赋值操作去没有能立即生效。typeof不知有什么魔力让它真正生效了,就像是刷新了下内部数据对象一样。

请高手帮忙分析下,谢谢!




------解决方案--------------------
JScript code
function hclick(){
    alert('test')
};
alert(hclick);