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 相关文章推荐
Javascript实例教程(19) 使用HoTMetal(5)
Dec 23 Javascript
Jquery原生态实现表格header头随滚动条滚动而滚动
Mar 18 Javascript
jQuery实现简单的图片查看器
Sep 11 Javascript
Vuejs中使用markdown服务器端渲染的示例
Nov 22 Javascript
JS中双击和单击事件冲突的解决方法
Apr 09 Javascript
利用Vconsole和Fillder进行移动端抓包调试方法
Mar 05 Javascript
JavaScript+HTML5 canvas实现放大镜效果完整示例
May 15 Javascript
小程序和web画三角形实现解析
Sep 02 Javascript
vue实现评论列表功能
Oct 25 Javascript
高效jQuery选择器的5个技巧实例分析
Nov 26 jQuery
使用eslint和githooks统一前端风格的技巧
Jul 29 Javascript
js实现tab栏切换效果
Aug 02 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
PHP实现通过get方式识别用户发送邮件的方法
2015/07/16 PHP
laravel 错误处理,接口错误返回json代码
2019/10/25 PHP
鼠标图片振动代码
2006/07/06 Javascript
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
2009/06/14 Javascript
Prototype的Class.create函数解析
2011/09/22 Javascript
jquery下checked取值问题的解决方法
2012/08/09 Javascript
jQuery 网易相册鼠标移动显示隐藏效果实现代码
2013/03/31 Javascript
js判断undefined变量类型使用typeof
2013/06/03 Javascript
jQuery动态添加删除select项(实现代码)
2013/09/03 Javascript
jquery cookie的用法总结
2013/11/18 Javascript
javascript实现的HashMap类代码
2014/06/27 Javascript
js重写alert控件(适合学习js的新手朋友)
2014/08/24 Javascript
js实现格式化金额,字符,时间的方法
2015/02/26 Javascript
四种参数传递的形式——URL,超链接,js,form表单
2015/07/24 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
2016/07/18 Javascript
深入理解JavaScript函数参数(推荐)
2016/07/26 Javascript
Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析
2016/09/17 Javascript
基于cookie实现zTree树刷新后展开状态不变
2017/02/28 Javascript
对存在JavaScript隐式类型转换的四种情况的总结(必看篇)
2017/08/31 Javascript
除Console.log()外更多的Javascript调试命令
2018/01/24 Javascript
Vue 后台管理类项目兼容IE9+的方法示例
2019/02/20 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
如何利用nodejs自动定时发送邮件提醒(超实用)
2020/12/01 NodeJs
python抓取网页内容示例分享
2014/02/24 Python
Python中的字典遍历备忘
2015/01/17 Python
小小聊天室Python代码实现
2016/08/17 Python
python数据类型_字符串常用操作(详解)
2017/05/30 Python
Python列表删除的三种方法代码分享
2017/10/31 Python
Flask框架中request、请求钩子、上下文用法分析
2019/07/23 Python
HTML5 实战PHP之Web页面表单设计
2011/10/09 HTML / CSS
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
产品生产计划书
2014/05/07 职场文书
同意迁入证明模板
2014/10/26 职场文书
九年级数学教学反思
2016/02/17 职场文书
如何使用pdb进行Python调试
2021/06/30 Python