A-A+

js function函数定义详解介绍

2016年10月15日 web前端设计 暂无评论 阅读 7 views 次

在js中function是定义函数的一个命令了,Js中函数其实是个对象,我们可以使用new function来创建了,下面给大空详细介绍function定义函数的方法。

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

1 声明式的(静态的)

2 对象式的(动态的)

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

以下是引用片段:

  1. function func1(…){…}  
  2. var func2=function(…){…};  
  3. var func3=function func4(…){…};  
  4. var func5=new Function();  

下面分别介绍一下。

1 声明式的

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

这是最常用的,它是静态的,和Java的静态方法类似,在页面加载时就被解析,且只解析一次。这个我就不细说了,程序员都知道。
可以用function关键字定义一个函数,并为每个函数指定一个函数名,通过函数名来进行调用。在JavaScript解释执行时,函数都是被维护为一个对象,这就是要介绍的函数对象(Function Object)。

在JavaScript中,函数对象对应的类型是Function,正如数组对象对应的类型是Array,日期对象对应的类型是Date一样,可以通过 new Function()来创建一个函数对象,也可以通过function关键字来创建一个对象。为了便于理解,我们比较函数对象的创建和数组对象的创建。先 看数组对象:下面两行代码都是创建一个数组对象myArray:

以下是引用片段:

  1. var myArray=[];  
  2. //等价于  
  3. var myArray=new Array();  
  4. 同样,下面的两段代码也都是创建一个函数myFunction:  
  5. function myFunction(a,b){  
  6. return a+b;  
  7. }//xiariboke.com  
  8. //等价于  
  9. var myFunction=new Function("a","b","return a+b");  

2 对象式的

通过和构造数组对象语句的比较,可以清楚的看到函数对象本质,前面介绍的函数声明是上述代码的第一种方式,而在解释器内部,当遇到这种语法时,就会自动构 造一个Function对象,将函数作为一个内部的对象来存储和运行。从这里也可以看到,一个函数对象名称(函数变量)和一个普通变量名称具有同样的规 范,都可以通过变量名来引用这个变量,但是函数变量名后面可以跟上括号和参数列表来进行函数调用。

用new Function()的形式来创建一个函数不常见,因为一个函数体通常会有多条语句,如果将它们以一个字符串的形式作为参数传递,代码的可读性差。下面介绍一下其使用语法:

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

以下是引用片段:

  1. new  Function("a""b""c""return a+b+c")  
  2. new Function("a, b, c""return a+b+c")  
  3. new Function("a,b""c""return a+b+c")  

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

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

3 字面量式

Function是所有函数对象的基础,而Object则是所有对象(包括函数对象)的基础。在JavaScript中,任何一个对象都是 Object的实例,因此,可以修改Object这个类型来让所有的对象具有一些通用的属性和方法,修改Object类型是通过prototype来完成

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

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

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

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

  1. Object.prototype.getType=function(){  
  2. return typeof(this);  
  3. }  
  4. var array1=new Array();  
  5. function func1(a,b){  
  6. return a+b;  
  7. }//xiariboke.com  
  8. alert(array1.getType());  
  9. alert(func1.getType());  
标签:

给我留言