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

<!DOCTYPEhtml><html><head></head><body><p>点击按钮就可以执行<em>displayDate()</em>函数。</p><butt... <!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();为何不行?
展开
 我来答
东哥zld
推荐于2017-10-13 · 机械自动化爱好者
东哥zld
机械自动化爱好者
采纳数:204 获赞数:17740
毕业不久,正在努力创造自己的骄傲

向TA提问 私信TA
展开全部
因为这是声明函数

( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法。
  函数声明、函数表达式、匿名函数
  函数声明:function fnName () {…};使用function关键字声明一个函数,再指定一个函数名,叫函数声明。
  函数表达式 var fnName = function () {…};使用function关键字声明一个函数,但未给函数命名,最后将匿名函数赋予一个变量,叫函数表达式,这是最常见的函数表达式语法形式。
  匿名函数:function () {}; 使用function关键字声明一个函数,但未给函数命名,所以叫匿名函数,匿名函数属于函数表达式,匿名函数有很多作用,赋予一个变量则创建函数,赋予一个事件则成为事件处理程序或创建闭包等等。
  函数声明和函数表达式不同之处在于,
一、Javascript引擎在解析javascript代码时会‘函数声明提升’(Function declaration Hoisting)当前执行环境(作用域)上的函数声明,而函数表达式必须等到Javascirtp引擎执行到它所在行时,才会从上而下一行一行地解析函数表达式,
二、函数表达式后面可以加括号立即调用该函数,函数声明不可以,只能以fnName()形式调用 。
帐号已注销
推荐于2017-09-13 · TA获得超过4630个赞
知道大有可为答主
回答量:1345
采纳率:50%
帮助的人:1637万
展开全部

js是事件驱动的,一个节点可以发生很多种事件,包括click事件。在js中,当节点发生某一个事件时,可以为该事件绑定一个处理函数。也就是类似的

document.getElementById("myBtn").onclick = function(){}

所要注意的是,这个节点的onclick属性,需要赋给一个函数类型的值,才可以处理事件。


但是displayDate()并不是一个函数,你可以说你定义了displayDate函数,但displayDate()也就是加了一对括号的displayDate,是函数执行了,displayDate()是等价于displayDate的返回值的。在displayDate函数里,只是给id为demo的节点重新设置了内容,没有返回值,所以默认的就是undefined。


那么如果写成

document.getElementById("myBtn").onclick = displayDate();

实际上是等价于

document.getElementById("myBtn").onclick = undefined;


显然undefined是不能作为节点事件的处理函数的。


但是,也不是一定要加上function(){},你可以写成这样:

document.getElementById("myBtn").onclick = displayDate;

虽然displayDate()不是函数,但displayDate却是函数,是可以作为节点事件的处理函数的。

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
NiceBabyLuckys
2013-07-28 · TA获得超过167个赞
知道小有建树答主
回答量:257
采纳率:100%
帮助的人:42.4万
展开全部
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);

};
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式