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 相关文章推荐
js实现动态改变字体大小代码
Jan 02 Javascript
Javascript核心读书有感之词法结构
Feb 01 Javascript
js实现感应鼠标图片透明度变化的方法
Feb 20 Javascript
jquery实现最简单的滑动菜单效果代码
Sep 12 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
Nov 07 Javascript
node.js微信公众平台开发教程
Mar 04 Javascript
jQuery手指滑动轮播效果
Dec 22 Javascript
微信小程序BindTap快速连续点击目标页面跳转多次问题处理
Apr 08 Javascript
JQuery属性操作与循环用法示例
May 15 jQuery
JS扁平化输出数组的2种方法解析
Sep 17 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
Apr 28 Javascript
js前端图片加载异常兜底方案
Jun 21 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 smarty的预保留变量总结
2008/12/04 PHP
PHP 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
PHP的基本常识小结
2013/07/05 PHP
Cygwin中安装PHP方法步骤
2015/07/04 PHP
php基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
linux下php上传文件注意事项
2016/06/11 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
2018/08/21 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
2019/10/14 PHP
会自动逐行上升的文本框
2006/06/30 Javascript
jquery获取自定义属性(attr和prop)实例介绍
2013/04/21 Javascript
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
javaScript中的this示例学习详解及工作原理
2014/01/13 Javascript
innerHTML中标签可以换行的方法汇总
2015/08/14 Javascript
JQuery 的跨域方法推荐_可跨任何网站
2016/05/18 Javascript
JavaScript中点击事件的写法
2016/06/28 Javascript
jquery实现图片平滑滚动详解
2017/03/22 jQuery
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
详解vue移动端项目代码拆分记录
2019/03/15 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
Vue路由的模块自动化与统一加载实现
2020/06/05 Javascript
Element Breadcrumb 面包屑的使用方法
2020/07/26 Javascript
javascript中layim之查找好友查找群组
2021/02/06 Javascript
[03:07]DOTA2英雄基础教程 冰霜诅咒极寒幽魂
2013/12/06 DOTA
Django的URLconf中使用缺省视图参数的方法
2015/07/18 Python
PyQt5每天必学之滑块控件QSlider
2018/04/20 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
python绘制地震散点图
2019/06/18 Python
python中的句柄操作的方法示例
2019/06/20 Python
pycharm修改文件的默认打开方式的步骤
2019/07/29 Python
关于Python字符串显示u...的解决方式
2020/03/06 Python
利用Python如何实时检测自身内存占用
2020/05/09 Python
HTML5 Canvas API中drawImage()方法的使用实例
2016/03/25 HTML / CSS
Meli Melo官网:名媛们钟爱的英国奢侈手包品牌
2017/04/17 全球购物
生物科学专业个人求职信范文
2013/12/07 职场文书
应届本科毕业生求职信
2014/07/23 职场文书