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 Event学习第四章 传统的事件注册模型
Feb 07 Javascript
jQuery模拟超链接点击效果代码
Apr 21 Javascript
JavaScript中逗号运算符介绍及使用示例
Mar 13 Javascript
关于Javascript回调函数的一个妙用
Aug 29 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
Sep 19 Javascript
JS触摸屏网页版仿app弹窗型滚动列表选择器/日期选择器
Oct 30 Javascript
树结构之JavaScript
Jan 24 Javascript
详解Node.js实现301、302重定向服务
Apr 07 Javascript
JavaScript制作简单的框选图表
May 15 Javascript
基于 jQuery 实现键盘事件监听控件
Apr 04 jQuery
基于jQuery实现可编辑的表格
Dec 11 jQuery
小程序实现文字循环滚动动画
Jun 14 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
一个高ai的分页函数和一个url函数
2006/10/09 PHP
php调用mysql存储过程
2007/02/14 PHP
php的mssql数据库连接类实例
2014/11/28 PHP
PHP7多线程搭建教程
2017/04/21 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
PHP设计模式之命令模式示例详解
2020/12/20 PHP
JavaScript中的View-Model使用介绍
2011/08/11 Javascript
js防止表单重复提交实现代码
2012/09/05 Javascript
jquery选择器之层级过滤选择器详解
2014/01/27 Javascript
ExtJS4 表格的嵌套 rowExpander应用
2014/05/02 Javascript
解决checkbox的attr(checked)一直为undefined问题
2014/06/16 Javascript
JS实现3D图片旋转展示效果代码
2015/09/22 Javascript
JS实现左右拖动改变内容显示区域大小的方法
2015/10/13 Javascript
基于JavaScript实现瀑布流效果(循环渐近)
2016/01/27 Javascript
Bootstrap实现基于carousel.js框架的轮播图效果
2017/05/02 Javascript
JS验证全角与半角及相互转化的介绍
2017/05/18 Javascript
js封装成插件_Canvas统计图插件编写实例
2017/09/12 Javascript
关于laydate.js加载laydate.css路径错误问题解决
2017/12/27 Javascript
vue2.0 路由模式mode="history"的作用
2018/10/18 Javascript
微信小程序基于canvas渐变实现的彩虹效果示例
2019/05/03 Javascript
pycharm 使用心得(五)断点调试
2014/06/06 Python
Python的Flask框架中的Jinja2模板引擎学习教程
2016/06/30 Python
Python编码类型转换方法详解
2016/07/01 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
python环境下安装opencv库的方法
2020/03/05 Python
Python基于network模块制作电影人物关系图
2020/06/19 Python
Selenium python时间控件输入问题解决方案
2020/07/22 Python
anello泰国官方网站:日本流行包包品牌
2019/08/08 全球购物
自主招生自荐信
2013/12/08 职场文书
初婚未育证明
2014/01/15 职场文书
卖车协议书范例
2014/09/16 职场文书
《学会生存》读后感3篇
2019/12/09 职场文书
python在package下继续嵌套一个package
2022/04/14 Python
cypress测试本地web应用
2022/06/01 Javascript