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 相关文章推荐
12款经典的白富美型—jquery图片轮播插件—前端开发必备
Jan 08 Javascript
解析javascript 数组以及json元素的添加删除
Jun 26 Javascript
javascript实现简单的省市区三级联动
May 14 Javascript
浅谈javascript 函数表达式和函数声明的区别
Jan 05 Javascript
jquery实现表格中点击相应行变色功能效果【实例代码】
May 09 Javascript
jquery easyui datagrid实现增加,修改,删除方法总结
May 25 Javascript
Javascript小技能总结(推荐)
Jun 02 Javascript
详解JS-- 浮点数运算处理
Nov 28 Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
Jul 30 Javascript
JS使用百度地图API自动获取地址和经纬度操作示例
Apr 16 Javascript
vue图片上传组件使用详解
Dec 23 Javascript
vue 防止页面加载时看到花括号的解决操作
Nov 09 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的可变变量名需要的注意的问题
2013/06/20 PHP
PHP+Ajax无刷新带进度条图片上传示例
2017/02/08 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
创建一个复制UBB软件信息的链接或按钮的js代码
2008/01/06 Javascript
juqery 学习之三 选择器 层级 基本
2010/11/25 Javascript
js iframe跨域访问(同主域/非同主域)分别深入介绍
2013/01/24 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
2016/01/13 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
关于JS中的apply,call,bind的深入解析
2016/04/05 Javascript
浅谈javascript基础之客户端事件驱动
2016/06/10 Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
2016/06/17 Javascript
JavaScript数组去重由慢到快由繁到简(优化篇)
2016/08/26 Javascript
完美解决IE不支持Data.parse()的问题
2016/11/24 Javascript
谈谈Vue.js——vue-resource全攻略
2017/01/16 Javascript
vue-dialog的弹出层组件
2020/05/25 Javascript
jQuery实现可编辑表格并生成json结果(实例代码)
2017/07/19 jQuery
js实现带进度条提示的多视频上传功能
2020/12/13 Javascript
vue.js实例对象+组件树的详细介绍
2017/10/20 Javascript
JavaScript实现QQ列表展开收缩扩展功能
2017/10/30 Javascript
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
Vue-CLI与Vuex使用方法实例分析
2020/01/06 Javascript
Webpack中SplitChunksPlugin 配置参数详解
2020/03/24 Javascript
[05:05]DOTA2亚洲邀请赛 战队出场仪式
2015/02/07 DOTA
python中常用的九种预处理方法分享
2016/09/11 Python
基于Python的文件类型和字符串详解
2017/12/21 Python
python的内存管理和垃圾回收机制详解
2019/05/18 Python
Docker部署Python爬虫项目的方法步骤
2020/01/19 Python
HTML5移动端开发中的Viewport标签及相关CSS用法解析
2016/04/15 HTML / CSS
世界领先的豪华床上用品供应商之一:Bedeck Home
2019/03/18 全球购物
墨西哥购物网站:Elektra
2020/01/21 全球购物
早晨薰衣草在线女性精品店:Morning Lavender
2021/01/04 全球购物
化学学院毕业生自荐信范文
2013/12/17 职场文书
物流专员岗位职责
2014/02/17 职场文书
《赶海》教学反思
2014/04/20 职场文书
班主任工作总结范文
2015/08/13 职场文书
python本地文件服务器实例教程
2021/05/02 Python