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优缺点分析说明
Jun 09 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
Mar 14 Javascript
JS常用表单验证方法总结
May 22 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
Mar 27 Javascript
javascript中tostring()和valueof()的用法及两者的区别
Nov 16 Javascript
bootstrap table实例详解
Jan 06 Javascript
原生JS实现不断变化的标签
May 22 Javascript
angular $watch 一个变量的变化(实例讲解)
Aug 02 Javascript
浅谈JavaScript中的属性:如何遍历属性
Sep 14 Javascript
详解webpack 入门与解析
Apr 09 Javascript
用vue快速开发app的脚手架工具
Jun 11 Javascript
vue循环数组改变点击文字的颜色
Oct 14 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技术开发技巧分享
2010/03/23 PHP
Linux下创建nginx脚本-start、stop、reload…
2014/08/03 PHP
PHP获取数组最后一个值的2种方法
2015/01/21 PHP
PHP上传文件参考配置大文件上传
2015/12/16 PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
2018/04/20 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
php-7.3.6 编译安装过程
2020/02/11 PHP
PHP设计模式入门之状态模式原理与实现方法分析
2020/04/26 PHP
javascript 实现字符串反转的三种方法
2013/11/23 Javascript
JQuery radio(单选按钮)操作方法汇总
2015/04/15 Javascript
jQuery基于ajax实现页面加载后检查用户登录状态的方法
2017/02/10 Javascript
JavaScript脚本语言是什么_动力节点Java学院整理
2017/06/26 Javascript
jquery拖动改变div大小
2017/07/04 jQuery
详解vue中引入stylus及报错解决方法
2017/09/22 Javascript
Web安全之XSS攻击与防御小结
2018/12/13 Javascript
微信小程序学习笔记之获取位置信息操作图文详解
2019/03/29 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
js 实现watch监听数据变化的代码
2019/10/13 Javascript
解决vue项目运行npm run serve报错的问题
2020/10/26 Javascript
详解django中url路由配置及渲染方式
2019/02/25 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
2020/01/06 Python
用python进行视频剪辑
2020/11/02 Python
Python将list元素转存为CSV文件的实现
2020/11/16 Python
深入理解HTML的FormData对象
2016/05/17 HTML / CSS
小学母亲节活动方案
2014/03/14 职场文书
出国留学担保书
2014/05/20 职场文书
反邪教标语
2014/06/23 职场文书
反对形式主义、官僚主义、享乐主义和奢靡之风整改措施
2014/09/17 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
考研英语复习计划
2015/01/19 职场文书
党性修养心得体会2016
2016/01/21 职场文书
用CSS3画一个爱心
2021/04/27 HTML / CSS
解决Swagger2返回map复杂结构不能解析的问题
2021/07/02 Java/Android
mysql5.7的安装及Navicate长久免费使用的实现过程
2021/11/17 MySQL
SQL CASE 表达式的具体使用
2022/03/21 SQL Server
Nginx+Tomcat负载均衡多实例详解
2022/04/11 Servers