Javascript-调用函数

Javascript-调用函数,javascript,Javascript,它按预期工作。i、 例如,当我单击复选框时,警报将显示其id c1.onclick = function () { alert(this.id); }; 但是如果我这样调用函数 c1.onclick = function () { alert(this.id); }; 当我单击“添加”按钮(在调用addfunction()时)时,会出现此警报。为什么?因为您正在执行dep()并将返回值分配给c1。单击 c1.onclick = function () { alert(this.id); };

它按预期工作。i、 例如,当我单击复选框时,警报将显示其id

c1.onclick = function () { alert(this.id); };
但是如果我这样调用函数

c1.onclick = function () { alert(this.id); };
当我单击“添加”按钮(在调用addfunction()时)时,会出现此警报。为什么?

因为您正在执行
dep()
并将返回值分配给
c1。单击

c1.onclick = function () { alert(this.id); };
如果要分配函数本身,请不要调用它:

c1.onclick = function () { alert(this.id); };

原因是
dep()
是一个函数调用表达式。因此,您在这里实际要做的是调用函数
dep()
,然后将结果(
undefined
)分配给
c1.onclick
。您应该执行以下操作:

c1.onclick = function () { alert(this.id); };
c1.onclick = dep;

您不想将调用
dep()
(未定义)的结果分配给onclick。您应该分配函数本身

c1.onclick = function () { alert(this.id); };
function dep() { alert(this.id); }
c1.onclick = dep;
代码

c1.onclick = function () { alert(this.id); };
 c1.onclick = dep;
实际上调用了dep。看到括号了吗???。这就是他们所做的,他们实际上执行代码。匿名功能似乎是一条出路。不过要小心这个词。在

c1.onclick = function () { alert(this.id); };
   c1.onclick = dep();
如果您“命名”该函数,则可以引用该函数本身。因为您已经提到了c1、c2和c3,所以您可以执行各种解决方案,如:

c1.onclick = function () { alert(this.id); };
   c1.onclick = function () { alert(this.id); };

c1.onclick = function () { alert(this.id); };
如果你尝试把它看作是C语言或C++语言,那么范围很难。
c1.onclick = function () { alert(this.id); };

希望有帮助

您正在传递函数调用的结果而不是对该函数的引用,该函数在异步单击调用事件中需要调用

c1.onclick = function () { alert(this.id); };
所以改变这个

c1.onclick = function () { alert(this.id); };
function click_handler(v_param) {alert(v_param.id);}
c1.onclick=function() {click_handler(c1);}

c1.onclick = function () { alert(this.id); };

事实上,他分配的是
未定义的
,而不是
空的
@johannellampee。问题与作用域无关问题在于OP调用函数并分配结果,而不是分配结果,与作用域无关哦,我明白了。我只是想指出使用非匿名函数时的范围界定问题,以防您想试用它们。另外,你说的是发货,而不是范围界定,这就是为什么我没有得到它。我不知道为什么我会觉得你是OP…西班牙语不是我的母语,因为你在叫它,而不是把它分配给活动。在上一个示例中,您正在附加函数,但此时不调用。