ECMAScript中函数function类型


Posted in Javascript onJune 03, 2015

说起来ECMAScript中上面最有意思,我想那莫过于函数了,有意思的根源,则在于函数实际上是对象。每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。函数通常是使用函数声明语法定义的,如下例子:

 function sum(num1,num2)

 {

    return num1+num2;

 }

这与下面使用函数表达式定义函数的方式几乎相差无几。

 var sum=function(num1,num2)

 {

     return num1+num2;

 };

以上代码定了变量sum并将其初始化为一个函数。你们会注意到,function关键字后面没有函数名。这是因为在使用函数表达式定义函数时,没有必要使用函数名(通过变量sum既可以引用函数)。另外,还要注意函数末尾有一个分号,就像声明其他变量时一样。

最后一种定义函数的方式是使用Function构造函数。Function构造函数可以接受任意数量的参数,但最后一个参数始终都会被看成函数体,而前面的参数则枚举出了新函数的参数。如下例子:

var sum=new Function("num1","num2","return num1+num2");//不推荐

从技术角度讲,这是一个函数表达式。但是,我们不推荐使用这种方法定义函数, 因为这种语法会导致解析两次代码(第一次解析常规的ECMAScript代码,第二次是解析传入构造函数中的字符串),从而影响性能。不过,这种语法对于理解“函数是对象,函数名是指针”的概念都是非常直观的。

由于函数名仅仅是指向函数的指针,因此函数名与包含对象指针的其他变量没有什么不同。换句话说,一个函数可能会有多个名字,如下例子:

function sum(num1,num2)

{

    return num1+num2;

}

alert(sum(10,10));//20

var anotherSum=sum;

alert(anotherSum(10,10));//20

sum=null;

alert(anotherSum(10,10));//20

以上代码首先定义了一个名为sum()的函数,用于求两个值的和。然后,有声明了变量anotherSum,并将其设置为sum()相等(将sum的值赋给anotherSum)。注意,使用不带圆括号的函数名是访问函数指针,而非调用函数。此时,anotherSum和sum 就指向了同一个函数,因此anotherSum()也可以被调用并返回结果。即使将sum设置为null,让它与函数“断绝关系”,但仍然可以证明正常调用anotherSum()。

以上所述就是本文的全部内容了,希望能够对大家学习javascript有所帮助。

Javascript 相关文章推荐
文本框的字数限制功能jquery插件
Nov 24 Javascript
IE与FireFox的JavaScript兼容问题解决办法
Dec 31 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
Aug 30 Javascript
jQuery代码实现对话框右上角菜单带关闭×
May 03 Javascript
D3.js实现饼状图的方法详解
Sep 21 Javascript
d3.js实现简单的网络拓扑图实例代码
Nov 06 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
Nov 24 Javascript
基于JS实现的随机数字抽签实例
Dec 08 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
Jan 19 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
Jun 16 Javascript
Vue+Element使用富文本编辑器的示例代码
Aug 14 Javascript
es6在react中的应用代码解析
Nov 08 Javascript
JavaScript运算符小结
Jun 03 #Javascript
浅谈JavaScript字符串与数组
Jun 03 #Javascript
详谈javascript中的cookie
Jun 03 #Javascript
jquery滚动特效集锦
Jun 03 #Javascript
jQuery实现文本展开收缩特效
Jun 03 #Javascript
jQuery插件制作之参数用法实例分析
Jun 01 #Javascript
jQuery插件制作之全局函数用法实例
Jun 01 #Javascript
You might like
无线电的诞生过程
2021/03/01 无线电
PHP网站开发中常用的8个小技巧
2015/02/13 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
PHP和MYSQL实现分页导航思路详解
2017/04/11 PHP
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
js 第二代身份证号码的验证机制代码
2011/05/12 Javascript
详解jquery事件delegate()的使用方法
2016/01/25 Javascript
Nodejs全局安装和本地安装的不同之处
2016/07/04 NodeJs
使用jquery.qrcode.js生成二维码插件
2016/10/17 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
2017/02/19 Javascript
从对象列表中获取一个对象的方法,依据关键字和值
2017/09/20 Javascript
vue使用axios实现文件上传进度的实时更新详解
2017/12/20 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
基于vue、react实现倒计时效果
2019/08/26 Javascript
微信小程序使用GoEasy实现websocket实时通讯
2020/05/19 Javascript
taro 实现购物车逻辑的实例代码
2020/06/05 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
Vue.extend 登录注册模态框的实现
2020/12/29 Vue.js
[33:15]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VP VS Mineski
2018/03/31 DOTA
[39:08]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第一场 12.12
2020/12/16 DOTA
Python中列表和元组的使用方法和区别详解
2020/12/30 Python
利用Python+阿里云实现DDNS动态域名解析的方法
2019/04/01 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
2019/08/05 Python
python多线程实现TCP服务端
2019/09/03 Python
Python vtk读取并显示dicom文件示例
2020/01/13 Python
python实现控制台输出彩色字体
2020/04/05 Python
Django用户登录与注册系统的实现示例
2020/06/03 Python
解决python图像处理图像赋值后变为白色的问题
2020/06/04 Python
python中什么是面向对象
2020/06/11 Python
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
2016/12/15 HTML / CSS
BASIC HOUSE官方旗舰店:韩国著名的服装品牌
2018/09/27 全球购物
大学生交通专业求职信
2014/09/01 职场文书
2015感人爱情寄语
2015/02/26 职场文书
分析Java中Map的遍历性能问题
2021/06/26 Java/Android
最新最全的手机号验证正则表达式
2022/02/24 Javascript