当前位置:首页 > 生活百科

js函数定义的三种方式(js函数定义与调用)

栏目:生活百科日期:2025-03-17浏览:0

深入理解:全面掌握JavaScript 函数定义方式

1.函数的定义

通俗的来讲,函数是由事件驱动的或者当它被调用时执行的可重复使用的代码快。它是 JavaScript 语言一个即重要又复杂的组成部分,任何一个 JavaScript 框架,如 Dojo、jQuery 等都是有成百上千个函数组成的。函数的使用不仅提高了代码本身的可读性,也为它的扩展提供了可能,同时还降低了维护成本,加快 web 项目的开放进度;尤其是在多人参与的敏捷开发中。

通常函数的定义是通过 function 语句实现的:

清单 1.函数定义

funcname 是要定义的函数名,是一个标识符,而不是字符串或者表达式;紧跟函数名后面的是用括号括起来的参数列表,参数之间用逗号隔开;最后,也是这个函数的核心部分:函数体,它是由一行或者多行代码组成并且是用大括号括起来的。

函数定义描述的是一个静态的程序结构,当 JavaScript 解析器遇到一个函数定义时,它就被解析并存储构成函数体的语句,然后定义一个和该函数名同名的全局或者某个对象属性来保存。当该函数被调用时,里面的函数体才真正的被执行。如:

清单 2

2. Function()构造函数

定义一个函数,最为普遍的是直接使用 function 关键字来定义,又称函数声明式(function declaration),如上面定义的 f 函数,但是 function 语句并非是定义函数的惟一方法。在 ECMAScript v1 和 JavaScript v1.1 中,还可以使用 Function () 构造函数和 new 运算符动态地定义函数,如下:

var myfunc = new Function (&‘x&’, &‘y&’, &‘alert(x+y)&’);

这行代码创建了一个新函数,该函数和下面使用 function 方法定义的函数是等价的:

清单 3.

Function () 定义中,前面两个是参数,参数可以是任意多个字符串;第三个是函数体,可以包含任何 JavaScript 语句,语句之间用分号隔开。如果没有参数,传一个函数体即可。由于传递给 Function () 函数中,没有一个字符串是用来声明函数名的,所以它是一个匿名函数。

使用 Function()构造函数来定义函数允许我们动态的来定义和编译一个函数,而不是限定在 function 预编译的函数体中。但同时也会带来负面影响,因为每次调用这个函数都要对它进行编译,对性能有一定的影响,尤其是在循环体中。

3. 函数直接量

函数定义的第三种方式是函数直接量,ECMAScript v3 定义了函数直接量,JavaScript 1.2 实现了它。函数直接量是一个表达式,它即可以定义一个匿名函数,也可以定义一个带函数名的函数:

清单 4.

注意:调用时得用定义的变量名,如f(4),而不能fact(4).

函数直接量和使用 Function()构造函数来创建函数的方法非常相似,因为两种方法都是通过 JavaScript 的表达式创建的,而不是由语句创建的;所以使用他们的方式也更灵活,尤其是那些只使用一次,而且不需要命名的函数。比如把它传递给其他的函数:

清单 5.

4.区别

三种方式的区别,可以从作用域、效率以及加载顺序来区分。首先,从作用域上来说,函数声明式和函数直接量使用的是局部变量,而 Function()构造函数却是全局变量:

清单 6.

其次是执行效率上来说,Function()构造函数的效率要低于其他两种方式,尤其是在循环体中,因为构造函数每执行一次都要重新编译,并且生成新的函数对象:

清单 7.

由此可见,在循环体中,函数直接量的执行效率是 Function()构造函数的 0.6 倍。所以在 Web 开发中,为了加快网页加载速度,提高用户体验,我们不建议选择 Function ()构造函数方式来定义函数。

最后是加载顺序,function 方式(即函数声明式)是在 JavaScript 编译的时候就加载到作用域中,而其他两种方式则是在代码执行的时候加载,如果在定义之前调用它,则会返回 undefined:

“js函数定义的三种方式(js函数定义与调用)” 的相关文章

dnf搬砖刷什么图收益高,全新dnf90搬砖方法

DNF更新100级版本的日子不会太远了,从体验服我们可以知晓,新版本难度很大,如果100级毕业整体伤害能提升三四倍,以当前的装备进高等级地图还是有些困难。所以新...

lol进不去游戏界面怎么办,教你一招轻松解决

英雄联盟强制新客户端,就此旧客户端不能再登陆。服务器拒绝旧客户端登陆。但是网友们载了新客户端,暴露出种种问题。多数网友都卡在这个LOGO上,再也进不去游戏。新客...

关于什么是垃圾邮件(1分钟教你避免邮件为垃圾邮件)

没有人会喜欢收到垃圾邮件(Spammail),但是你知道网络上的垃圾邮件,到底又是从哪里来吗?根据AtlasVPN最新给出的报告,美国无疑是全世界最主要的垃圾邮...

今日热点广告怎么彻底删除(教你快速去除烦人广告)

早晨去公司上班开机后,不知大家有没有这个困扰,‘今日热点’必定弹出来,虽然点掉“X”只要0.1秒的时间,但是经常看到它还是很烦的。今天教你如何跟它说拜拜一、当你...

仙人跳什么意思,带你揭秘仙人跳的常规套路

法律讲堂警惕仙人跳、杀猪盘等网络犯罪兴高采烈去旅游,一打开手机通讯软件,立刻有附近的美女头像打招呼,情投意合下还会被询问是否需要“特殊服务”,你怎么看?近日,西...

ipad怎么看pdf文档(适合平板的pdf阅读器)

iPad自诞生以来似乎一直处于一种“鸡肋”的状态,而最近手机大屏化的趋势,使得iPad的生存空间又进一步缩小了。有多少人「抱着获取一部生产力工具的想法购买了iP...

7寸大屏幕手机哪款好(最值入手的5款大屏幕手机)

在智能手机快速发展的阶段,大家追求的大屏手机成功突破7英寸,大屏已经成为各大厂商发展的方向,其实大屏手机可以容纳更多的配置,电池的容量增大、摄像头更多等优势,随...

window10怎么设置开机密码(图解8步设置好电脑开机密码)

最近有朋友问峰哥,win10如何设置密码的问题,对于win10系统电脑如何设置密码锁的问题,相信还有很多朋友不清楚。很多人都安装了win10系统,为了保护隐私,...

OSCAR数据库文档(个人文档数据库软件)

数据库系统数据库审计软件数据库加密系统集合北京神舟航天软件技术有限公司神通数据库管理系统神通数据库管理系统(简称神通数据库,原OSCAR数据库)是神舟软件拥有自...

ugc是什么,ugc模式优缺点介绍

作为一个运营人员,核心工作应该是设计一个合理的UGC激励体系,让产品和用户形成互惠互利的关系,才能让产品存活、壮大。UGC是英文UserGeneratedCon...