Posted on 2007-05-04 22:20 
ZelluX 阅读(333) 
评论(0)  编辑  收藏  所属分类: 
Web 
			 
			
		 
		越来越发现JavaScript其实是一门很强大、很精深的语言,要好好学习下。
以下例子都摘自于Professional JavaScript for Web Developers
1. JavaScript中函数不能重载。
2. 每个函数有一个对应的arguments[]数组,包含所有的参数,且数量不需固定。

 function howManyArgs()
function howManyArgs()  {
{
 alert(arguments.length);
    alert(arguments.length);
 }
}3. 函数也是一个对象,使用Function类创建函数的方法是:
var function_name = new Function(argument1, argument2,..,argumentN, function_body);
这里所有的参数都必须是字符串。
 var sayHi = new Function("sName", Message", "alert(\"Hello \" + sName + \", \" + sMessage + \”);”);
var sayHi = new Function("sName", Message", "alert(\"Hello \" + sName + \", \" + sMessage + \”);”);
从这个角度看,不支持函数重载的原因也很简单。
 doAdd = new Function("iNum", "alert(iNum + 100)");
doAdd = new Function("iNum", "alert(iNum + 100)");
 doAdd = new Function("iNum", "alert(iNum + 10)");
doAdd = new Function("iNum", "alert(iNum + 10)");
 doAdd(10);
doAdd(10);
可以推出的几个结论:
a) 第二次函数声明使得doAdd指向了另一个对象,自然不可能实现重载。
b) 函数可以通过句柄很容易的复制。
c) 函数能作为参数传递给另一个函数。
d) func.toString()可以得到函数的具体内容。
4. 闭包 Closure
简单的定义就是使用了函数体之外的引用。
 var sMessage = “Hello World!”;
var sMessage = “Hello World!”;

 function sayHelloWorld()
function sayHelloWorld()  {
{
 alert(sMessage);
    alert(sMessage);
 }
}
 sayHelloWorld();
sayHelloWorld(); var iBaseNum = 10;
var iBaseNum = 10;

 function addNumbers(iNum1, iNum2)
function addNumbers(iNum1, iNum2)  {
{

 function doAddition()
    function doAddition()  {
{
 return iNum1 + iNum2 + iBaseNum;
        return iNum1 + iNum2 + iBaseNum;
 }
    }
 return doAddition();
    return doAddition();
 }
}
例二中的内嵌方法doAddition()使用了外部方法的参数。