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的checkbox下拉框插件代码
Jun 25 Javascript
Javascript基础教程之if条件语句
Jan 18 Javascript
js实现照片墙功能实例
Feb 05 Javascript
JavaScript实现cookie的写入、读取、删除功能
Nov 05 Javascript
关于微信上网页图片点击全屏放大效果
Dec 19 Javascript
在一个页面重复使用一个js函数的方法详解
Dec 26 Javascript
Angular的事件和表单详解
Dec 26 Javascript
详解Weex基于Vue2.0开发模板搭建
Mar 20 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
May 02 Javascript
Vue中之nextTick函数源码分析详解
Oct 17 Javascript
vue如何将v-for中的表格导出来
May 07 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
Nov 21 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 之 没有mysql支持时的替代方案
2006/10/09 PHP
解读PHP的Yii框架中请求与响应的处理流程
2016/03/17 PHP
PHP脚本自动识别验证码查询汽车违章
2016/12/20 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
Laravel框架在本地虚拟机快速安装的方法详解
2018/06/11 PHP
解决在laravel中auth建立时候遇到的问题
2019/10/15 PHP
制作特殊字的脚本
2006/06/26 Javascript
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
2010/07/26 Javascript
js 通用javascript函数库整理
2011/08/14 Javascript
require.js深入了解 require.js特性介绍
2014/09/04 Javascript
nodejs中简单实现Javascript Promise机制的实例
2014/12/06 NodeJs
AngularJS模块详解及示例代码
2016/08/17 Javascript
node.js学习之交互式解释器REPL详解
2016/12/08 Javascript
VUE实现一个分页组件的示例
2017/09/13 Javascript
Vue2 监听属性改变watch的实例代码
2018/08/27 Javascript
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
2019/07/25 Javascript
python通过pil为png图片填充上背景颜色的方法
2015/03/17 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
Php多进程实现代码
2018/05/07 Python
python gdal安装与简单使用
2019/08/01 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
2020/02/14 Python
python多维数组分位数的求取方式
2020/03/03 Python
基于python实现可视化生成二维码工具
2020/07/08 Python
Linux安装Python3如何和系统自带的Python2并存
2020/07/23 Python
详解Scrapy Redis入门实战
2020/11/18 Python
css3实现的下拉菜单效果示例
2014/01/22 HTML / CSS
HTML5手机端弹出遮罩菜单特效代码
2016/01/27 HTML / CSS
澳大利亚新奇小玩意网站:Yellow Octopus
2017/12/28 全球购物
李培根演讲稿
2014/05/22 职场文书
2015年校医个人工作总结
2015/07/24 职场文书
2015年主婚人婚礼致辞
2015/07/28 职场文书
浅谈golang 中time.After释放的问题
2021/05/05 Golang
python 如何在list中找Topk的数值和索引
2021/05/20 Python
在vue中import()语法不能传入变量的问题及解决
2022/04/01 Vue.js
Windows和Linux上部署Golang并运行程序
2022/04/22 Servers
Django数据库(SQlite)基本入门使用教程
2022/07/07 Python