JavaScript中的Function函数

来源:互联网 发布:公司网络环境搭建 编辑:程序博客网 时间:2024/04/26 23:55

Js的函数function其实是个对象,但我总拿它和Java的方法一样对待,因为它的写法明明就是一个“函数”。

其实我们常用的定义函数的写法只是写法之一,写法其实有三种:

       1 声明式的(静态的)

       2 对象式的(动态的)

       3 字面量式的(也被称为函数表达式)

       

下面分别介绍一下。

 

       1 声明式的

       写法:function func(param1,param2…){…};

       这是最常用的,它是静态的,和Java的静态方法类似,在页面加载时就被解析,且只解析一次。这个我就不细说了,程序员都知道。

 

       2 对象式的

         写法:var func =new Function("param1","param2",..."function body");

       例子:var sayHi=new Funciton("toWhom","alert('hi'+toWhom)");

       说明:构造函数的参数个数不确定,倒数第一个形参就是函数体,其它的形参就是函数的形参。

 

对象式(其实这是我给命的名,书中叫动态式我觉得欠妥,这种写法明明就是在创建对象)是动态的,因为它构造函数的参数都是字符串,可以动态改变。正是如此,函数体每创建一次,浏览器都要重新解析,性能肯定不如静态方式,但它也有它的优势,因为你可用利用它动态创建一个函数。

 

3 字面量式

       写法:var func=function [函数名可选,函数内可见](parms){...};

       例子:var func=function funcTest(id){alert(id)}

       说明:这种写法的函数名,只有在函数体内可见,可用于实现递归函数。

 

       字面量式多用于事件注册,如:obj.onclick=function(this){alert(this.id)}。

 

       无论用何种写法,实际上都是创建了一个函数对象,没有本质的区别。不能凭经验想当然把js函数看作是其他语言的“函数”,那样就会浪费它的灵活性,它可以像其它类型实例一样被当作参数传递。


原创粉丝点击