请问在JS中调用函数为何有时要加function{}?

<!DOCTYPE html>

<html>
<head>
</head>
<body>
<p>点击按钮就可以执行 <em>displayDate()</em> 函数。</p>
<button id="myBtn">点击这里</button>
<script>
document.getElementById("myBtn").onclick=function(){displayDate()};
function displayDate()
{
document.getElementById("demo").innerHTML=Date();
}
</script>
<p id="demo"></p>
</body>
</html> 
为何在这里要用function(){displayDate()};直接用displayDate();为何不行?

慕婉清6462132
浏览 329回答 3
3回答

阿波罗的战车

js是事件驱动的,一个节点可以发生很多种事件,包括click事件。在js中,当节点发生某一个事件时,可以为该事件绑定一个处理函数。也就是类似的1document.getElementById("myBtn").onclick&nbsp;=&nbsp;function(){}所要注意的是,这个节点的onclick属性,需要赋给一个函数类型的值,才可以处理事件。但是displayDate()并不是一个函数,你可以说你定义了displayDate函数,但displayDate()也就是加了一对括号的displayDate,是函数执行了,displayDate()是等价于displayDate的返回值的。在displayDate函数里,只是给id为demo的节点重新设置了内容,没有返回值,所以默认的就是undefined。那么如果写成1document.getElementById("myBtn").onclick&nbsp;=&nbsp;displayDate();实际上是等价于1document.getElementById("myBtn").onclick&nbsp;=&nbsp;undefined;显然undefined是不能作为节点事件的处理函数的。但是,也不是一定要加上function(){},你可以写成这样:1document.getElementById("myBtn").onclick&nbsp;=&nbsp;displayDate;虽然displayDate()不是函数,但displayDate却是函数,是可以作为节点事件的处理函数的。

12345678_0001

document.getElementById("myBtn").onclick=function(){displayDate()};这句话的意思是,当你的元素触发点击事件后会触发一个函数模板比如:function callme(){alert("点击我了!");}document.getElementById("myBtn").onclick=callme;这样当事件被触发时,因为为事件的模板使用的是callme函数,因此它的内部功能被实现,但是这里要注意的重点是,你的事件只能设置一个函数模板,不能传递参数,因此有了:function(){};匿名函数,在你的匿名函数中,可以定义参数,将此参入传入到你的方法中,如:function callme(name){alert(name+"点击我了!");}document.getElementById("myBtn").onclick=function(){var name="李四";callme(name);};&nbsp;

元芳怎么了

因为这是声明函数( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法。  函数声明、函数表达式、匿名函数  函数声明:function fnName () {…};使用function关键字声明一个函数,再指定一个函数名,叫函数声明。  函数表达式 var fnName = function () {…};使用function关键字声明一个函数,但未给函数命名,最后将匿名函数赋予一个变量,叫函数表达式,这是最常见的函数表达式语法形式。  匿名函数:function () {}; 使用function关键字声明一个函数,但未给函数命名,所以叫匿名函数,匿名函数属于函数表达式,匿名函数有很多作用,赋予一个变量则创建函数,赋予一个事件则成为事件处理程序或创建闭包等等。  函数声明和函数表达式不同之处在于,一、Javascript引擎在解析javascript代码时会‘函数声明提升’(Function declaration Hoisting)当前执行环境(作用域)上的函数声明,而函数表达式必须等到Javascirtp引擎执行到它所在行时,才会从上而下一行一行地解析函数表达式,二、函数表达式后面可以加括号立即调用该函数,函数声明不可以,只能以fnName()形式调用 。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript
Java