//2019.3.2 下午 没有最好的程序,只有更好的程序。
当时第一次遇到这样的问题时,真的是纠结了好半天,虽然程序丢了括号,成功运行了,但是我还是觉得弄懂其中的原理心里才能罢休!
看下列程序:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div>
<h5>1.被称为国球的运动是___。</h5>
<p>A.乒乓球</p>
<p>B.足球</p>
<p>C.篮球</p>
</div>
</body>
<script type="text/javascript">
function test(){
if(window.event.keyCode==65){ //A的键盘序号为65
alert("答案正确!");
}else{
alert("答案错误!正确答案为A!");
}
}
document.onkeydown=test; //此处test没有加括号();
</script>
</html>
程序解释:以上程序,是一个简单的用键盘事件来执行代码的程序。内容为一个选择题,题目答案为A,也就是说,当我们按下键盘上的A键时,提示答案正确,否则提示答案错误。
程序剖析:观察最后带有注释的一行,在我们调用新构造的test方法时,没有加括号,如果加括号了,程序会报错。为什么呢?
个人总结:
解释1:
函数只要是要调用它进行执行的,都必须加括号。此时,函数()实际上等于函数的返回值。当然,有些没有返回值,但已经执行了函数体内的行为,这个是根本,就是说,只要加括号的,就代表将会执行函数体代码。不加括号的,都是把函数名称作为函数的指针,用于传参,此时不是直接得到函数的结果,因为不会运行函数体代码。但是得到的是整个函数,让函数直接去运行。它只是传递了函数体所在的地址位置,在需要的时候好找到函数体去执行。
解释2:
一般构造函数不加(),具体原因是当将某个事件(如onclick)调用自己构造的函数时,内部原理是把这个函数赋值给了这个事件,要的是这个函数不是要返回值,然后这个事件就相当于成为了这个函数,每次事件发生时即就是这个函数发生。