现在的位置: 首页 > 综合 > 正文

《javascript高级程序设计》学习笔记(三):javascript 函数一些特性

2013年06月14日 ⁄ 综合 ⁄ 共 1360字 ⁄ 字号 评论关闭
 

这里只记录下javascript函数的一些特性。关于对象,模拟类会在以后的笔记中记录

1.javascript函数无重载。

js不支持重载,后面函数会覆盖前面函数。它不支持重载的特点不免让人感到意外。

2.arguments对象

js不支持重载,不代表我们不能实现重载。程序员的智慧是无穷的!让我们借助arguments对

象来实现函数重载吧!arguments.length表示参数个数

function sayHi(){
    if(arguments.length == 1){
       if(typeof(arguments[0])=="string"){
     alert("do method 1");
       }else{
     alert("do method 2");
       }
    }else if(arguments.length == 2){
     alert("do method 3");
    }
}

sayHi("hehe");
sayHi(1);
sayHi("傻笑",100)

3.Function 类

可以使用Function类直接创建函数:
var function_name = new Function(arg1,arg2,...argN,function_body);

例如:
var sayHi = new Function("sName","sMessage","alert(sName+','+sMessage);");
sayHi("wangping","ww");

注意:最好不要使用Function类创建函数,因为----慢!

4.由于函数名只是指向函数的变量,所以可以把函数作为参数传递给另外一个参数。

function callFun1(fnFun1,vArg){
   fnFun1(vArg);
}

function doAdd(iNum){
   alert(iNum+10);
}
callFun1(doAdd,10);

5.由于函数是引用类型,所以它们也有属性和方法名。

function_name.length      返回函数名为function_name的函数的参数个数。
function_name.toString()  返回函数名为function_name的函数的源代码(这个调试的时候

很有用)。
function_name.valueOf()    同function_name.toString()

代码:
function doAdd(){
   alert(10);
}
alert(doAdd.valueOf());

6.闭包。闭包是javascript最容易让人误解的特点之一。所谓闭包,指词法表示包括不必计算

的变量的函数,通俗地说就是指函数能访问函数外定义的变量:

var iBaseNum =10;

function outerFun(iNum1,iNum2){
    function innerFun(){
 alert(iNum1+iNum2+iBaseNum)
    }
    return innerFun();
}

outerFun(1,1);

innerFun可以无需定义参数,得到它外部的函数iNum1,iNum2的参数值以及全局变量iBaseNum

的值。虽然难于想像,但是当你被c#等语言为了互相调用而不停地定义参数搞得抓狂时,你就

看到闭包的好处了。

抱歉!评论已关闭.