为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕婉清6462132 2021-12-31 11:07:40
<!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();为何不行?
查看完整描述

3 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

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

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

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

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

那么如果写成

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

实际上是等价于

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


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

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

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

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


查看完整回答
反对 回复 2022-01-03
?
12345678_0001

TA贡献1802条经验 获得超5个赞

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);

};

 


查看完整回答
反对 回复 2022-01-03
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

因为这是声明函数

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



查看完整回答
反对 回复 2022-01-03
  • 3 回答
  • 0 关注
  • 311 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号