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滚动条多种样式,推荐
Feb 05 Javascript
javascript正则匹配汉字、数字、字母、下划线
Apr 10 Javascript
JavaScript 作用域链解析
Nov 13 Javascript
javaScript实现滚动新闻的方法
Jul 30 Javascript
PhotoSwipe异步动态加载图片方法
Aug 25 Javascript
js 获取今天以及过去日期
Apr 11 Javascript
详解axios在vue中的简单配置与使用
May 10 Javascript
javascript数组去重方法总结(推荐)
Mar 20 Javascript
vue和better-scroll实现列表左右联动效果详解
Apr 29 Javascript
Vue 中可以定义组件模版的几种方式
Aug 06 Javascript
小程序自定义模板实现吸顶功能
Jan 08 Javascript
js删除指定位置超链接中含有百度与360的标题
Jan 06 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
DC动漫人物排行
2020/03/03 欧美动漫
php面向对象程序设计入门教程
2019/06/22 PHP
jQuery解决iframe高度自适应代码
2009/12/20 Javascript
jQuery图片预加载 等比缩放实现代码
2011/10/04 Javascript
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
2012/02/03 Javascript
Jquery实现鼠标移上弹出提示框、移出消失思路及代码
2013/05/19 Javascript
JS基于FileSystemObject创建一个指定路径的TXT文本文件
2015/08/05 Javascript
js操作XML文件的实现方法兼容IE与FireFox
2016/06/25 Javascript
Js调用Java方法并互相传参的简单实例
2016/08/11 Javascript
vue实现点击图片放大效果
2017/08/15 Javascript
angular中ui calendar的一些使用心得(推荐)
2017/11/03 Javascript
详解Vue中使用Echarts的两种方式
2018/07/03 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
2018/11/30 Javascript
layui实现数据分页功能(ajax异步)
2019/07/27 Javascript
Vue实现回到顶部和底部动画效果
2019/07/31 Javascript
Python cx_freeze打包工具处理问题思路及解决办法
2016/02/13 Python
Python字符串和字典相关操作的实例详解
2017/09/23 Python
使用pandas read_table读取csv文件的方法
2018/07/04 Python
Python面向对象之接口、抽象类与多态详解
2018/08/27 Python
python中append实例用法总结
2019/07/30 Python
对python 树状嵌套结构的实现思路详解
2019/08/09 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
2019/08/26 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
Python timeit模块原理及使用方法
2020/10/10 Python
Canvas 文字碰撞检测并抽稀的方法
2019/05/27 HTML / CSS
amazeui页面校验功能的实现代码
2020/08/24 HTML / CSS
LightInTheBox西班牙站点:全球商品在线采购
2016/09/22 全球购物
英国当代时尚和街头服饰店:18montrose
2018/12/15 全球购物
学生党员思想汇报
2013/12/28 职场文书
影视动画专业个人的自我评价
2013/12/31 职场文书
高校优秀辅导员事迹材料
2014/05/07 职场文书
应届生求职信范文
2014/05/26 职场文书
员工安全责任书范本
2014/07/24 职场文书
2015年度销售个人工作总结
2015/03/31 职场文书
python实现的人脸识别打卡系统
2021/05/08 Python
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js