JavaScript 申明函数的三种方法 每个函数就是一个对象(一)


Posted in Javascript onDecember 04, 2009

一、申明函数的三种方法 (Declaring a Function)
方法一:function functionName([parameters]){functionBody};

Example D1

function add(a, b) 
{ 
return a+b; 
} 
alert(add(1,2)); // produces 3

当我们这样申明函数时,函数的内容被解释(但没有执行,要我们调用该函数才会执行),同时,一个名为add的对象已经建立。

方法二:将一个未命名的函数function赋给一个指定变量(var)

Example D2

var add=function(a, b) 
{ 
return a+b; 
} 
alert(add(1,2)); // produces 3

这种申明的语法看起来怪异,但它可以帮助我们更好地理解“函数即对象”。通过这种方式申明的函数的内容,同样是被解释,而未被执行。
同时,我们还可以这样定义:

Example D2A:

var add=function theAdd(a, b) 
{ 
return a+b; 
} 
alert(theAdd(1,2)); // produces 3 
alert(add(1,2)); // also produces 3

由上面一个例子可以看出,我们既可以通过函数名theAdd调用函数,也可以通过指定的函数变量名add调用函数。

Example D2B:

var myObject=new Object(); 
myObject.add=function(a,b){return a+b}; 
// myObject now has a property/a method named "add" 
// and I can use it like below 
myObject.add(1, 2);

而这个例子表明,当我们需要将一个自定义函数作为某个对象的属性时,这种函数申明方法是非常有用的,它更接近OOP的思想。

方法三:使用new运算符申明函数

varName=new Function([param1Name, param2Name,...paramNName], functionBody);

Example D3:

var add=new Function("a", "b", "return a+b;"); 
alert(add(3,4)); // produces 7

这里有两个参数a和b,以及一个函数体,返回a+b。同时请注意,new Function(……),这里使用的是大写Function,而不是小写function,这就表明,我们是要建立一个Function对象(回想下new Object()建立一个Object对象)。同时,我们也可以看出,前面的参数名和后面的函数体都是通过字符串形式传递(注意:它们都加了双引号)。我们可以有许多个参数,JavaScript会自动判别函数体,通常是离右边括号最近的那一个参数。当然,我们不一定非得将所有的代码写在同一行,我们可以分多行写,中间使用“+”或者“\”进行联接。“+”和“\”告诉我们,JavaScript将要在下一行寻找剩余的代码。

Example D3A

var add=new Function("a", "b", 
"alert" + // chop string using "+" 
"('adding '+a+' and ' +b);\ // separate string using "\" 
return a+b;"); 
alert(add(3,4)); // produces 7

当然,通过这种方式申明函数,函数体没有被解释(要直到运行时才被解释),这样便导致了性能的降低。为什么呢?请看下面的例子:

Example D3B

function createMyFunction(myOperator) 
{ 
return new Function("a", "b", "return a" + myOperator + "b;"); 
} 
var add=createMyFunction("+"); // creates "add" function 
var subtract=createMyFunction("-"); // creates "subtract" function 
var multiply=createMyFunction("*"); // created "multiply" function 
// test the functions 
alert("result of add="+add(10,2)); // result is 12 
alert("result of substract="+subtract(10,2)); // result is 8 
alert("result of multiply="+multiply(10,2)); // result is 20 
alert(add);

这个例子比较有趣,它在执行时可以通过传递参数(myOperator)分别创建了三个不同的Function对象。然后解释器在意图解释createMyFunction的时候,对return中的“运算符”具体是什么不清楚,从而无法解释,这样,性能自然打了折扣。
当然,当我们有特殊用途,如允许用户去创建他们自定义的函数时,我们可以采用这种函数申明方式,不过我们还是应尽量避免这样使用。

Javascript 相关文章推荐
jquery获取div宽度的实现思路与代码
Jan 13 Javascript
extjs两个tbar问题探讨
Aug 08 Javascript
使用jQuery实现的掷色子游戏动画效果
Mar 14 Javascript
JavaScript实现标题栏文字轮播效果代码
Oct 24 Javascript
瀑布流的实现方式(原生js+jquery+css3)
Jun 28 Javascript
bootstrap模态框跳转到当前模板页面 框消失了而背景存在问题的解决方法
Nov 30 Javascript
详解JS中遍历语法的比较
Apr 07 Javascript
Angular.JS中指令ng-if、ng-show/ng-hide和ng-switch的使用教程
May 07 Javascript
详解AngularJS controller调用factory
May 19 Javascript
vue+mockjs模拟数据实现前后端分离开发的实例代码
Aug 08 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
Apr 08 Javascript
ant design vue嵌套表格及表格内部编辑的用法说明
Oct 28 Javascript
javascript 跳转代码集合
Dec 03 #Javascript
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
Dec 03 #Javascript
javascript json 新手入门文档
Dec 03 #Javascript
js 屏蔽鼠标右键脚本附破解方法
Dec 03 #Javascript
33种Javascript 表格排序控件收集
Dec 03 #Javascript
javascript 面向对象全新理练之原型继承
Dec 03 #Javascript
javascript 面向对象全新理练之继承与多态
Dec 03 #Javascript
You might like
php mssql 日期出现中文字符的解决方法
2009/03/10 PHP
小文件php+SQLite存储方案
2010/09/04 PHP
php全局变量和类配合使用深刻理解
2013/06/05 PHP
解析mysql 表中的碎片产生原因以及清理
2013/06/22 PHP
Linux环境下php实现给网站截图的方法
2016/05/03 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
2017/03/02 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
如何在PHP中读写文件
2020/09/07 PHP
很全的显示阴历(农历)日期的js代码
2009/01/01 Javascript
调用js时ie6和ie7,ff的区别
2009/08/19 Javascript
js实现表格字段排序
2014/02/19 Javascript
Javascript加载速度慢的解决方案
2014/03/11 Javascript
jQuery新的事件绑定机制on()示例应用
2014/07/18 Javascript
基于jquery实现简单的分页控件
2016/03/17 Javascript
JavaScript中判断数据类型的方法总结
2016/05/24 Javascript
jquery 给动态生成的标签绑定事件的几种方法总结
2018/02/24 jQuery
微信小程序Flex布局用法深入浅出分析
2019/04/25 Javascript
js实现带箭头的进度流程
2020/03/26 Javascript
Layui弹框中数据表格中可双击选择一条数据的实现
2020/05/06 Javascript
python实现的jpg格式图片修复代码
2015/04/21 Python
Python中threading模块join函数用法实例分析
2015/06/04 Python
Python中常见的数据类型小结
2015/08/29 Python
Python中的条件判断语句基础学习教程
2016/02/07 Python
简要讲解Python编程中线程的创建与锁的使用
2016/02/28 Python
Python编写打字训练小程序
2019/09/26 Python
python实现连续变量最优分箱详解--CART算法
2019/11/22 Python
Python telnet登陆功能实现代码
2020/04/16 Python
在python里创建一个任务(Task)实例
2020/04/25 Python
使用Python内置模块与函数进行不同进制的数的转换
2020/04/26 Python
Python常用GUI框架原理解析汇总
2020/12/07 Python
南非领先的在线旅行社:Travelstart南非
2016/09/04 全球购物
计算机应用专业毕业生求职信
2013/10/24 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
教导主任个人总结
2015/03/03 职场文书
乡镇科协工作总结2015
2015/05/19 职场文书
SpringCloud项目如何解决log4j2漏洞
2022/04/10 Java/Android