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 表格分页等操作实现代码(pagedown,pageup)
Apr 11 Javascript
在JQuery dialog里的服务器控件 事件失效问题
Dec 08 Javascript
JS判断表单输入是否为空(示例代码)
Dec 23 Javascript
一个通过script自定义属性传递配置参数的方法
Sep 15 Javascript
jQuery实现强制cookie过期方法汇总
May 22 Javascript
javascript实现平滑无缝滚动
Aug 09 Javascript
JavaScript对象封装的简单实现方法(3种方法)
Jan 03 Javascript
jquery动态赋值id与动态取id方法示例
Aug 21 jQuery
vue使用技巧及vue项目中遇到的问题
Jun 04 Javascript
微信小程序实现卡片层叠滑动效果
Jun 21 Javascript
layui内置模块layim发送图片添加加载动画的方法
Sep 23 Javascript
浅析VUE防抖与节流
Nov 24 Vue.js
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 上传文件大小限制
2009/07/05 PHP
PHP如何使用array_unshift()在数组开头插入元素
2020/09/01 PHP
代码生成器 document.write()
2007/04/15 Javascript
js 三级关联菜单效果实例
2013/08/13 Javascript
JS操作JSON要领详细总结
2013/08/25 Javascript
在JavaScript中判断整型的N种方法示例介绍
2014/06/18 Javascript
浅析JavaScript事件和方法
2015/02/28 Javascript
jQuery实现图片轮播特效代码分享
2015/09/15 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
2015/11/02 Javascript
jquery判断复选框选中状态以及区分attr和prop
2015/12/18 Javascript
jquery实现点击弹出可放大居中及关闭的对话框(附demo源码下载)
2016/05/10 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
2016/05/30 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
jQuery分页插件jquery.pagination.js使用方法解析
2017/02/09 Javascript
Angular2.0/4.0 使用Echarts图表的示例代码
2017/12/07 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
[01:51]2014DOTA2西雅图邀请赛 MVP 外卡赛black场间采访
2014/07/09 DOTA
深入解读Python解析XML的几种方式
2016/02/16 Python
Python matplotlib学习笔记之坐标轴范围
2019/06/28 Python
Python模拟登入的N种方式(建议收藏)
2020/05/31 Python
python报错: 'list' object has no attribute 'shape'的解决
2020/07/15 Python
css3背景图片透明叠加属性cross-fade简介及用法实例
2013/01/08 HTML / CSS
如何用css3实现switch组件开关的方法
2018/02/09 HTML / CSS
详解H5 活动页之移动端 REM 布局适配方法
2017/12/07 HTML / CSS
意大利网上购书网站:Libraccio.it
2021/02/03 全球购物
会计电算化毕业生自荐信
2014/03/03 职场文书
委托公证书
2014/04/08 职场文书
学前班评语大全
2014/05/04 职场文书
小学生一分钟演讲稿
2014/08/26 职场文书
社区班子个人对照检查材料思想汇报
2014/10/07 职场文书
优秀教师个人总结
2015/02/11 职场文书
2015年大学生村官工作总结
2015/04/21 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
Python爬虫之爬取某文库文档数据
2021/04/21 Python
德生TECSUN S-2000使用手册文字版
2022/05/10 无线电