Javascript全局对象调用函数?

Javascript全局对象调用函数?,javascript,global-variables,scope,Javascript,Global Variables,Scope,我对javascript有一个非常奇怪的问题。我的代码相当长,因此下面是结构和问题的示例: var x = new function f() { this.id = ""; } function g(obj) { if (x.id == "") { ... obj.firstChild.setAttribute("onclick", "javascript:o();"); ... x.id = obj.id;

我对javascript有一个非常奇怪的问题。我的代码相当长,因此下面是结构和问题的示例:

var x = new function f() {
    this.id = "";
}

function g(obj) {
    if (x.id == "") {
        ...
        obj.firstChild.setAttribute("onclick", "javascript:o();");
        ...
        x.id = obj.id;
    } else if (x.id != obj.id) {
        ...
        x.id = "";
        g(obj);
    }
}

function o() {...
    if (something == something) {
        ...
    } else {
        ...
        x.id = ""; // if-statement of the g() function is called here?
    }
}
如您所见,g()函数的if语句出于某种原因被调用或在x.id被更改时重新运行。我无法理解这一点,因为它们不在同一范围内,在任何情况下更改变量都不会触发任何事件

任何帮助都将不胜感激

x.id=”“;//这里是否调用了g()函数的语句?

如果代码确实如您所示,那么这行代码将不会生成函数调用。该行只是对
x
id
属性的赋值。通过指定
x
id
属性触发函数调用的唯一方法是使用支持属性访问器(getter和setter)的浏览器,这是非常不可能的(代码中没有这样做的内容)

在某种类型的循环中,似乎有其他东西在调用
g
,因此您更改该值会导致下一次调用
g
查看更改。正如Jonathon在对这个问题的评论中指出的那样,这可能是您使用
setTimeout
、或
setInterval
、或偶数处理程序(例如,在鼠标移动时)等设置的,但在引用的代码中没有


可能离题:

您一开始就有这一行代码:

var x = new function f() {
    this.id = "";
}
该代码使用了一个“命名函数表达式”,该表达式应该是有效的,但在某些实现中会导致问题(例如)。将其拆分以跨浏览器获得所需的结果:

var x = new f();
function f() {
    this.id = "";
}

主题外

除了在具有URI的属性上(如
a
元素上的
href
),您不使用
javascript:
伪协议。
onclick
属性不接受URI,它接受JavaScript代码,因此更改:

obj.firstChild.setAttribute("onclick", "javascript:o();");

但是最好直接分配处理程序:

obj.firstChild.onclick = o;

……或者甚至考虑使用<代码> AdvestTeListNe<代码>或其IE对应代码<代码>附件事件< /代码>。

< P>谢谢您的回答。我现在已经解决了这个问题。每当单击某个tableRow对象时,就会调用函数g()。同一表格行包含obj.firstChild。因此,当我单击obj.firstChild时,同时执行o()和g()


现在,我必须弄清楚如何防止在单击obj.firsChild时调用g()。

正在发生其他事情,而不是该语句影响任何事情。查找设置超时、设置间隔、事件等。在
g
函数中设置断点并检查堆栈跟踪。
obj.firstChild.onclick = o;