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 追加tr和删除tr示例代码
Sep 12 Javascript
了不起的node.js读书笔记之node.js中的特性
Dec 22 Javascript
深入JavaScript高级程序设计之对象、数组(栈方法,队列方法,重排序方法,迭代方法)
Dec 01 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
Mar 15 Javascript
React 组件转 Vue 组件的命令写法
Feb 28 Javascript
解决Mac node版本升级失败的问题
May 16 Javascript
vue.js绑定事件监听器示例【基于v-on事件绑定】
Jul 07 Javascript
JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例
Jan 29 Javascript
Vue 理解之白话 getter/setter详解
Apr 16 Javascript
Vue实现拖放排序功能的实例代码
Jul 08 Javascript
JS中多层次排序算法的实现代码
Jan 06 Javascript
解决vue $http的get和post请求跨域问题
Jun 07 Vue.js
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分页显示制作详细讲解
2006/10/09 PHP
PIGCMS 如何关闭聊天机器人
2015/02/12 PHP
PHP实现的一致性Hash算法详解【分布式算法】
2018/03/31 PHP
简单实例处理url特殊符号&处理(2种方法)
2013/04/02 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
ExpressJS入门实例
2015/01/14 Javascript
JavaScript操作Oracle数据库示例
2015/03/06 Javascript
JavaScript中匿名函数用法实例
2015/03/23 Javascript
jQuery实现Flash效果上下翻动的中英文导航菜单代码
2015/09/22 Javascript
浅析JS原型继承与类的继承
2016/04/07 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
JavaScript通过HTML的class来获取HTML元素的方法总结
2016/05/24 Javascript
全面了解JS中的匿名函数
2016/06/29 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
浅谈webpack编译vue项目生成的代码探索
2017/12/11 Javascript
不使用JavaScript实现菜单的打开和关闭效果demo
2018/05/01 Javascript
手淘flexible.js框架使用和源代码讲解小结
2018/10/15 Javascript
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
npm qs模块使用详解
2020/02/07 Javascript
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
2017/07/24 Python
Python调用ctypes使用C函数printf的方法
2017/08/23 Python
Python正则表达式知识汇总
2017/09/22 Python
彻底理解Python list切片原理
2017/10/27 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
HTML5 声明兼容IE的写法
2011/05/16 HTML / CSS
美国知名户外用品畅销中心:Sierra Trading Post
2016/07/19 全球购物
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
建筑施工实习自我鉴定
2013/09/19 职场文书
公司大门门卫岗位职责
2014/06/11 职场文书
医生学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
2014年女职工工作总结
2014/11/27 职场文书
学习雷锋精神倡议书
2015/04/27 职场文书
小学运动会入场口号
2015/12/24 职场文书
小学生必读成语故事大全:送给暑假的你们
2019/07/09 职场文书
Django一小时写出账号密码管理系统
2021/04/29 Python
MySQL修炼之联结与集合浅析
2021/10/05 MySQL