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 相关文章推荐
Wordpress ThickBox 添加“查看原图”效果代码
Dec 11 Javascript
jQuery之$(document).ready()使用介绍
Apr 05 Javascript
JavaScript多图片上传案例
Sep 28 Javascript
JS实现课堂随机点名和顺序点名
Mar 09 Javascript
浅谈JavaScript find 方法不支持IE的问题
Sep 28 Javascript
vue 插值 v-once,v-text, v-html详解
Jan 19 Javascript
在Vue项目中使用d3.js的实例代码
May 01 Javascript
vue移动端微信授权登录插件封装的实例
Aug 28 Javascript
深入浅出 Vue 系列 -- 数据劫持实现原理
Apr 23 Javascript
Vue 中可以定义组件模版的几种方式
Aug 06 Javascript
vue 导航菜单刷新状态不消失,显示对应的路由界面操作
Aug 06 Javascript
JS实现拖动模糊框特效
Aug 25 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处理Oracle的CLOB实例
2014/11/03 PHP
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
Thinkphp5.0框架视图view的循环标签用法示例
2019/10/12 PHP
Mootools 1.2教程 定时器和哈希简介
2009/09/15 Javascript
javascript 同时在IE和FireFox获取KeyCode的代码
2010/02/07 Javascript
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
2011/10/16 Javascript
用js调用迅雷下载代码的二种方法
2013/04/15 Javascript
jtable列中自定义button示例代码
2013/11/21 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
2016/11/30 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
使用Vue组件实现一个简单弹窗效果
2018/04/23 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
layUI实现三级导航菜单效果
2019/07/26 Javascript
开源一个微信小程序仪表盘组件过程解析
2019/07/30 Javascript
在vue项目中promise解决回调地狱和并发请求的问题
2020/11/09 Javascript
vue实现树状表格效果
2020/12/29 Vue.js
[42:32]Secret vs Optic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python中执行shell命令的几个方法小结
2014/09/18 Python
Python对list列表结构中的值进行去重的方法总结
2016/05/07 Python
python 专题九 Mysql数据库编程基础知识
2017/03/16 Python
Python存取XML的常见方法实例分析
2017/03/21 Python
对Python进行数据分析_关于Package的安装问题
2017/05/22 Python
Python冲顶大会 快来答题!
2018/01/17 Python
python 将print输出的内容保存到txt文件中
2018/07/17 Python
tensorflow学习教程之文本分类详析
2018/08/07 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
2018/12/27 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
2020/04/27 Python
雅高酒店中国:Accorhotels.com China
2018/03/26 全球购物
香港万宁官方海外旗舰店:香港健与美连锁店
2018/09/27 全球购物
英国屋顶用品和材料超市:Roofing Supplies UK
2019/08/24 全球购物
经典c++面试题三
2015/07/08 面试题
爱岗敬业演讲稿范文
2014/01/14 职场文书
员工2014年度工作总结
2014/12/09 职场文书
技术入股合作协议书
2016/03/21 职场文书
PostGIS的安装与入门使用指南
2022/01/18 PostgreSQL