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中数组的排序、乱序和搜索实现代码
Nov 30 Javascript
jQuery事件 delegate()使用方法介绍
Oct 30 Javascript
用Javascript获取页面元素的具体位置
Dec 09 Javascript
seajs中模块的解析规则详解和模块使用总结
Mar 12 Javascript
js 动态为textbox添加下拉框数据源的方法
Apr 24 Javascript
AngularJS实现Input格式化的方法
Nov 07 Javascript
原生JS实现图片轮播效果
Dec 26 Javascript
JS高仿抛物线加入购物车特效实现代码
Feb 20 Javascript
webpack3+React 的配置全解
Aug 21 Javascript
JS内部事件机制之单线程原理
Jul 02 Javascript
浅谈开发eslint规则
Oct 01 Javascript
使用NestJS开发Node.js应用的方法
Dec 03 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 Curl多线程原理实例详解
2013/11/06 PHP
PHP的switch判断语句的“高级”用法详解
2014/10/01 PHP
php实现按天数、星期、月份查询的搜索框
2016/05/02 PHP
PHP swoole和redis异步任务实现方法分析
2019/08/12 PHP
js checkbox(复选框) 使用集锦
2009/04/28 Javascript
JavaScript中的面向对象介绍
2012/06/30 Javascript
javascript 拷贝节点cloneNode()使用介绍
2014/04/03 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
JavaScript实现的多种鼠标拖放效果
2015/11/03 Javascript
Javascript iframe交互并兼容各种浏览器的解决方法
2016/07/12 Javascript
AngularJS 过滤器的简单实例
2016/07/27 Javascript
JavaScript中最容易混淆的作用域、提升、闭包知识详解(推荐)
2016/09/05 Javascript
JavaScript截屏功能的实现代码
2017/07/28 Javascript
jQuery点击页面其他部分隐藏下拉菜单功能
2018/11/27 jQuery
详解vue-cli+es6引入es5写的js(两种方法)
2019/04/19 Javascript
nodejs简单抓包工具使用详解
2019/08/23 NodeJs
Python常用内置函数总结
2015/02/08 Python
Python实现读取及写入csv文件的方法示例
2018/01/12 Python
一篇文章了解Python中常见的序列化操作
2019/06/20 Python
Pycharm+Python+PyQt5使用详解
2019/09/25 Python
Python文件路径名的操作方法
2019/10/30 Python
Python解释器及PyCharm工具安装过程
2020/02/26 Python
Python异常处理机制结构实例解析
2020/07/23 Python
基于python实现图片转字符画代码实例
2020/09/04 Python
Python操作word文档插入图片和表格的实例演示
2020/10/25 Python
C#面试题问题集
2016/04/02 面试题
公交公司毕业生求职信
2014/02/15 职场文书
对公司合理化的建议书
2014/03/12 职场文书
2014基层党员干部学习全国两会心得体会
2014/03/17 职场文书
静心口服夜广告词
2014/03/20 职场文书
生物技术专业求职信
2014/06/10 职场文书
小学生迎国庆演讲稿
2014/09/05 职场文书
教师党的群众路线对照检查材料
2014/09/24 职场文书
世界遗产导游词
2015/02/13 职场文书
2015年社区综治宣传月活动总结
2015/03/25 职场文书
小学工作总结2015
2015/05/04 职场文书