问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

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

发布网友 发布时间:2022-05-07 11:10

我来回答

3个回答

热心网友 时间:2022-05-15 08:52

因为这是声明函数

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

热心网友 时间:2022-05-15 10:10

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却是函数,是可以作为节点事件的处理函数的。

热心网友 时间:2022-05-15 11:45

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

};
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
道具“山”怎么做?(悬赏10呀) 老表你好hea23集片尾曲叫什么? 老表你好hea23集利亚唱的歌叫什么 河北赵县特产:梨园金蝉 cad字体有大有小,怎么调一致,如图 相亲对象都有啥特点? 良好的交往对象具有怎样的特点 良好的交往对象具有什么特点 现在我的微粒贷上只有1千的额度,怎么才能提升它的额度? 请问怎么在微粒贷上提高借贷额度? JavaScript 有什么坑 vivo如何找到小v助手 javascript 函数表达式会执行吗 js中没有声明的“变量”为什么会变成全局属性 hoisting在javascript里是怎么工作的 金鸡牌八珍益母丸 八珍益母胶囊是中成药吗 什么是中成药 八珍益母丸什么时候吃好 八珍益母丸更年期能吃吗 有一个配电箱给出36伏电压,我用一个HH54P36v继电器想控制380伏电气回路... 怎么用小电压控制电路 开关能否替代电磁继电器 我想一个小电压(0-10VDC)输入,输出一个大电压(0-220VAC)控制发热圈,哪能种方式比较方便? 有什么办法可以用1.5,3.3,5v电压控制220v,380v甚至更大除了继电器,即使继电器有没有过较大的电流和电压 电磁继电器为什么可以用低电压小电流控制高电压大电流 怎样用小电流控制大电流,低电压控制高电压? 如何实现小电压或小电流信号控制高电压大电流的目的 关于继电器的问题! 这里的继电器作用是什么?继电器不是用小电压小电流控制大电压大电流的吗?这里是输入12v,输出12v 三极管怎么实现低电压控制高电压功能以及它的电流方向? js 判断条件该怎么写 JS判断是否有QueryString的问题! 求鲁迅、老舍 的作品读后感。作品不限。跪求!!! <猫城记>是讲什么的? 《猫城记》推荐理由是什么?(简短一点) 老舍的猫城记,全部,急急急急急! 浙江斯蓓琳针纺有限公司怎么样? 贵州2020年一级建造师考试报名时间公布了吗? 2013年贵州一级建造师报名时间是什么时候啊? 请问2013年贵州一级建造师考试什么时候开始报名呢? 2016贵州一级建造师报名条件有哪些?什么时候报名? 2013年贵州一级建造师什么时候开始报名? 2015年贵州一级建造师报名时间是哪天呢? 贵州省一级建造师考试报名时间是多久 贵州2013一级建造师考试时间 报名时间、地点和要求是什么? 2015年贵州一级建造师报名时间在什么时候?需要带什么材料? 贵州一级二级建造师报考进什么网站 2016贵州一级建造师报名条件?报名流程是怎样的? 手痒是什么意思? 请问2008年贵州省一级建造师的考试时间
  • 焦点

最新推荐

猜你喜欢

热门推荐