AJAX入门之深入理解JavaScript中的函数2
点击次数:29 次 发布日期:2008-11-26 11:03:23 作者:源代码网
|
源代码网推荐 //函数体 源代码网推荐 } 源代码网推荐 //等价于 源代码网推荐 var funcName=function(){ 源代码网推荐 //函数体 源代码网推荐 } 源代码网推荐 源代码网推荐 但前面一种方式创建的是有名函数,而后面是创建了一个无名函数,只是让一个变量指向了这个无名函数。在使用上仅有一点区别,就是:对于有名函数,它可以出现在调用之后再定义;而对于无名函数,它必须是在调用之前就已经定义。例如: 源代码网推荐 源代码网推荐 源代码网推荐 <script language="JavaScript" type="text/javascript"> 源代码网推荐 <!-- 源代码网推荐 func(); 源代码网推荐 var func=function(){ 源代码网推荐 alert(1) 源代码网推荐 } 源代码网推荐 //--> 源代码网推荐 </script> 源代码网推荐 源代码网推荐 这段语句将产生func未定义的错误,而: 源代码网推荐 源代码网推荐 源代码网推荐 <script language="JavaScript" type="text/javascript"> 源代码网推荐 <!-- 源代码网推荐 func(); 源代码网推荐 function func(){ 源代码网推荐 alert(1) 源代码网推荐 } 源代码网推荐 //--> 源代码网推荐 </script> 源代码网推荐 源代码网推荐 则能够正确执行,下面的语句也能正确执行: 源代码网推荐 源代码网推荐 源代码网推荐 <script language="JavaScript" type="text/javascript"> 源代码网推荐 <!-- 源代码网推荐 func(); 源代码网推荐 var someFunc=function func(){ 源代码网推荐 alert(1) 源代码网推荐 } 源代码网推荐 //--> 源代码网推荐 </script> 源代码网推荐 源代码网推荐 由此可见,尽管JavaScript是一门解释型的语言,但它会在函数调用时,检查整个代码中是否存在相应的函数定义,这个函数名只有是通过function funcName()形式定义的才会有效,而不能是匿名函数。 源代码网推荐 源代码网推荐 函数对象和其他内部对象的关系 源代码网推荐 源代码网推荐 除了函数对象,还有很多内部对象,比如:Object、Array、Date、RegExp、Math、Error。这些名称实际上表示一个类型,可以通过new操作符返回一个对象。然而函数对象和其他对象不同,当用typeof得到一个函数对象的类型时,它仍然会返回字符串“function”,而typeof一个数组对象或其他的对象时,它会返回字符串“object”。下面的代码示例了typeof不同类型的情况: 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 alert(typeof(Function))); 源代码网推荐 alert(typeof(new Function())); 源代码网推荐 alert(typeof(Array)); 源代码网推荐 alert(typeof(Object)); 源代码网推荐 alert(typeof(new Array())); 源代码网推荐 alert(typeof(new Date())); 源代码网推荐 alert(typeof(new Object())); 源代码网推荐 源代码网推荐 运行这段代码可以发现:前面4条语句都会显示“function”,而后面3条语句则显示“object”,可见new一个function实际上是返回一个函数。这与其他的对象有很大的不同。其他的类型Array、Object等都会通过new操作符返回一个普通对象。尽管函数本身也是一个对象,但它与普通的对象还是有区别的,因为它同时也是对象构造器,也就是说,可以new一个函数来返回一个对象,这在前面已经介绍。所有typeof返回“function”的对象都是函数对象。也称这样的对象为构造器(constructor),因而,所有的构造器都是对象,但不是所有的对象都是构造器。 源代码网推荐 源代码网推荐 既然函数本身也是一个对象,它们的类型是function,联想到C++、Java等面向对象语言的类定义,可以猜测到Function类型的作用所在,那就是可以给函数对象本身定义一些方法和属性,借助于函数的prototype对象,可以很方便地修改和扩充Function类型的定义,例如下面扩展了函数类型Function,为其增加了method1方法,作用是弹出对话框显示"function": 源代码网推荐 源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
