2007-06-20

新手入门:理解JavaScript中函数的使用

来源: 本站收集整理 作者:佚名 评论 0 条
 

函数的本质是一个内部对象,由JavaScript解释器决定其运行方式。通过上述代码创建的函数,在程序中可以使用函数名进行调用。本节开头列出的函数定义问题也得到了解释。注重可直接在函数声明后面加上括号就表示创建完成后立即进行函数调用,例如:

var i=function (a,b){

return a b;

}(1,2);

alert(i);

这段代码会显示变量i的值等于3。i是表示返回的值,而不是创建的函数,因为括号“(”比等号“=”有更高的优先级。这样的代码可能并不常用,但当用户想在很长的代码段中进行模块化设计或者想避免命名冲突,这是一个不错的解决办法。

需要注重的是,尽管下面两种创建函数的方法是等价的:

function funcName(){

//函数体

}

//等价于

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":
共5页: 上一页 [1] 2 [3] [4] [5] 下一页

(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:Ajax技术的安全问题不容忽视  
下一篇:用javascript实现select的美化
    评论加载中…

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号