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 插件开发笔记整理
Jan 17 Javascript
DIV+CSS+JS不间断横向滚动实现代码
Mar 19 Javascript
原生js拖拽(第一课 未兼容)拖拽思路
Mar 29 Javascript
jquery ui对话框实例代码
May 10 Javascript
jQuery匹配文档链接并添加class的方法
Jun 26 Javascript
canvas简单快速的实现知乎登录页背景效果
May 08 Javascript
利用node.js制作命令行工具方法教程(一)
Jun 22 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
Mar 28 jQuery
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
Apr 02 Javascript
Vue 实现从文件中获取文本信息的方法详解
Oct 16 Javascript
Element Dialog对话框的使用示例
Jul 26 Javascript
vue全局使用axios的操作
Sep 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
PHP小偷程序的设计与实现方法详解
2016/10/15 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
2017/02/17 PHP
php7函数,声明,返回值等新特性介绍
2018/05/25 PHP
动态加载iframe
2006/06/16 Javascript
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
JavaScript去除空格的三种方法(正则/传参函数/trim)
2013/02/06 Javascript
javascript之typeof、instanceof操作符使用探讨
2013/05/19 Javascript
Javascript函数式编程语言
2015/10/11 Javascript
如何通过js实现图片预览功能【附实例代码】
2016/03/30 Javascript
D3.js实现直方图的方法详解
2016/09/25 Javascript
HTML5 js实现拖拉上传文件功能
2020/11/20 Javascript
JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】
2017/04/19 Javascript
jquery实现下拉菜单的手风琴效果
2017/07/23 jQuery
Vue中使用的EventBus有生命周期
2018/07/12 Javascript
jQuery zTree插件快速实现目录树
2019/08/16 jQuery
nodejs制作小爬虫功能示例
2020/02/24 NodeJs
js实现手表表盘时钟与圆周运动
2020/09/18 Javascript
[01:14:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Orenda
2014/05/22 DOTA
python下如何让web元素的生成更简单的分析
2008/07/17 Python
python re正则表达式模块(Regular Expression)
2014/07/16 Python
Python中的列表知识点汇总
2015/04/14 Python
浅谈python字符串方法的简单使用
2016/07/18 Python
Python 稀疏矩阵-sparse 存储和转换
2017/05/27 Python
详解python多线程、锁、event事件机制的简单使用
2018/04/27 Python
Tensorflow设置显存自适应,显存比例的操作
2020/02/03 Python
PyQt中使用QtSql连接MySql数据库的方法
2020/07/28 Python
使用CSS3来绘制一个月食图案
2015/07/18 HTML / CSS
澳大利亚设计师服装在线:MISHA
2019/10/07 全球购物
LightInTheBox法国站:中国跨境电商
2020/03/05 全球购物
大学生入党自我鉴定
2013/10/31 职场文书
招聘单位介绍信
2014/01/14 职场文书
办公自动化毕业生求职信
2014/03/09 职场文书
运动会演讲稿50字
2014/08/25 职场文书
会计求职简历自我评价
2015/03/10 职场文书
工作证明书
2015/06/15 职场文书
门卫管理制度范本
2015/08/05 职场文书