Javascript -调用函数
Javascript - Calling a function
<div id='dependent'>
<input type="button" value="Add" id='btn' onclick='addfunction()' />
</div>
<script type="text/javascript">
var a = 1;
var b = 1;
var c = 1;
function addfunction() {
var c1 = document.createElement('input');
c1.type = "checkbox";
c1.id = "a" + a++;
var c2 = document.createElement('input');
c2.type = "checkbox";
c2.id = "b" + b++;
var c3 = document.createElement('input');
c3.type = "checkbox";
c3.id = "c" + c++;
var c4 = document.createElement('br');
document.getElementById("dependent").appendChild(c1);
document.getElementById("dependent").appendChild(c2);
document.getElementById("dependent").appendChild(c3);
document.getElementById("dependent").appendChild(c4);
// c1.onclick = dep();
// function dep() { alert(this.id); }
c1.onclick = function () { alert(this.id); };
}
</script>
当我像这样调用函数时,
c1.onclick = function () { alert(this.id); };
按预期工作。例如,当我单击复选框时,会出现带有其id的警报。
但是如果我以这种方式调用函数,
c1.onclick = dep();
function dep() { alert(this.id); }
警报出现,当我点击"添加"按钮(在调用addfunction())。为什么?
因为你正在执行dep()
并将返回值赋给c1.onclick
。
如果你想给函数本身赋值,不要叫它:
c1.onclick = dep;
您正在传递函数调用的结果而不是对您需要在单击事件时异步调用的函数的引用
所以改变这个
c1.onclick = dep();
c1.onclick = dep;
原因是dep()
是函数调用表达式。所以你实际上在这里做的是调用函数dep()
,然后将结果(undefined
)分配给c1.onclick
。你应该这样做:
function dep() { alert(this.id); }
c1.onclick = dep;
你不想把调用dep()
(undefined)的结果赋值给onclick。你应该给函数本身赋值
c1.onclick = dep;
代码
c1.onclick = dep();
实际上调用了deep .见括号??。这就是它们所做的,它们实际执行代码。匿名函数似乎是可行的方法。注意this这个词。在
c1.onclick = function () { alert(this.id); };
this可以引用函数本身,如果你"命名"它。既然您已经引用了c1, c2和c3,您可以使用各种解决方案,例如:
c1.onclick=function() {alert(c1.id);}
或
function click_handler(v_param) {alert(v_param.id);}
c1.onclick=function() {click_handler(c1);}
如果你试图把JS中的作用域看作是C或c++之类的语言,它可能会很棘手。
相关文章:
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在输入字段上有两个函数调用,一个在Blur上,一个不在Angular中
- 如何在Javascript函数调用中循环变量
- Javascript:应为赋值或函数调用,但实际看到的却是表达式
- 如何远程检查JavaScript应用程序的函数调用堆栈
- javascript函数调用不起作用
- 为什么这个函数调用会破坏程序并导致未定义的变量
- 如何通过函数调用设置图像的src
- 从全局函数调用Ember控制器上的方法
- 为什么Jquery$.ajax在函数调用中触发所有statusCode,即使调用成功
- JavaScript函数调用(arg1)(arg2)
- 打印链接时,将javascript函数调用到链接中
- 在函数调用中封装数据除了隐藏数据之外还有什么优点
- 无法从JavaScript中的函数调用对象属性
- 对中的函数调用进行排序是回调的唯一方法
- 函数调用方法有什么用
- Javascript:JSHint:应为赋值或函数调用,但实际看到的却是表达式
- HTML5(Bootstrap)通过函数调用运行动画
- 函数调用不起作用
- 函数中的Javascript函数调用