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 相关文章推荐
html组件不可输入(只读)同时任何组件都有效
Apr 01 Javascript
js hover 定时器(实例代码)
Nov 12 Javascript
一个CSS+jQuery实现的放大缩小动画效果
Feb 19 Javascript
javascript制作sql转换为stringBuffer的小工具
Apr 03 Javascript
jQuery中 attr() 方法使用小结
May 03 Javascript
JavaScript仿百度图片浏览效果
Nov 23 Javascript
js每隔两秒输出数组中的一项(实例)
May 28 Javascript
node.js 发布订阅模式的实例
Sep 10 Javascript
Vue中rem与postcss-pxtorem的应用详解
Nov 20 Javascript
vue组件创建的三种方式小结
Feb 03 Javascript
解决vue中的无限循环问题
Jul 27 Javascript
如何在 Vue 中使用 JSX
Feb 14 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的变量类型和作用域详解
2014/03/12 PHP
php模拟post提交数据的方法
2015/02/12 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
PHP生成图像验证码的方法小结(2种方法)
2016/07/18 PHP
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
2011/10/24 Javascript
JQuery入门——用bind方法绑定事件处理函数应用介绍
2013/02/05 Javascript
js简单实现HTML标签Select联动带跳转
2013/10/23 Javascript
使用jquery中height()方法获取各种高度大全
2014/04/02 Javascript
再谈JavaScript异步编程
2016/01/27 Javascript
基于JavaScript实现购物网站商品放大镜效果
2016/09/06 Javascript
Javascript中作用域的详细介绍
2016/10/06 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
2016/12/27 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
Python时区设置方法与pytz查询时区教程
2013/11/27 Python
python求素数示例分享
2014/02/16 Python
python实现TCP服务器端与客户端的方法详解
2015/04/30 Python
Python中getattr函数和hasattr函数作用详解
2016/06/14 Python
python 读写txt文件 json文件的实现方法
2016/10/22 Python
基于Python对象引用、可变性和垃圾回收详解
2017/08/21 Python
python查看文件大小和文件夹内容的方法
2019/07/08 Python
python try except返回异常的信息字符串代码实例
2019/08/15 Python
django 中使用DateTime常用的时间查询方式
2019/12/03 Python
Python ini文件常用操作方法解析
2020/04/26 Python
Flask缓存静态文件的具体方法
2020/08/02 Python
详解pandas apply 并行处理的几种方法
2021/02/24 Python
详解CSS3开启硬件加速的使用和坑
2017/08/21 HTML / CSS
英国最大的电子产品和家电零售企业:Currys PC World
2016/09/24 全球购物
日本航空官方网站:JAL
2019/06/19 全球购物
升职自荐书范文
2013/11/28 职场文书
《再别康桥》教学反思
2014/02/12 职场文书
暑期学习心得体会
2014/09/02 职场文书
2014年大学生工作总结
2014/11/20 职场文书
2014年档案管理员工作总结
2014/12/01 职场文书
什么是css原子化,有什么用?
2022/04/24 HTML / CSS
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技