JavaScript --function()(2)

来源:互联网 发布:我国酸雨的ph数据 编辑:程序博客网 时间:2024/05/18 00:01
深入function() 属性:
-----了解arguments的几点:
1:arguments是一个对象不是一个数组,他没有继承Array(所有的数组都会默认的继承Array)。
2:arguments.length是实际调用函数传递到被调用函数的参数的个数。

3:JavaScript函数是不用指定函数参数类型的,JavaScript也不会检测调用函数时传递的参数类型,我们
也无法让函数调用者知道被调用函数所需要的参数个数和类型;如果传递的参数超过了函数应有的参数个数,JavaScript将忽略掉额外的函数参数;如果传递的参数少于给定的参数个数,没有被传值的参数激昂被忽略掉而被赋值为undefined。(从这个角度看JavaScript的函数参数都是可选的)
 
---1>:用Arguments来构造类似函数重载功能(只能完成函数的个数的重载,无法完成函数参数类型类型和函数参数顺序重载)JavaScript函数本身是没有重载功能的。
function addValue(x,y,z)
{
    if(arguments.length ==2)
    return x+y;
    else
    if(arguments.length==3)
    return x+y+z;
}
document.writeln(addValue(1,2));
document.writeln(addValue(1,2,3));
//注意:JavaScript函数语法上不允许这样调用的addValue(1,,3);
 
---2>:函数的参数的值可以在被调用的函数的方法体内进行改变的
如:这里有使用()来完成函数调用功能JavaScript常常都用它。
(function out(name)
{
    document.writeln(name);//结果是:dengsenhua
    arguments[0] = null;
    document.writeln(name);//结果是:null
})("dengsenhua");
 
---3>:使用arguments完成求数组中的最大值:
function maxValue()
{
    var m = Number.NEGATIVE_INFINITY;
    for(var i = 0; i < arguments.length; i ++ )
    if (arguments[i] > m) m = arguments[i];
    return m;
}
document.writeln(maxValue(1, 10, 100, 2, 3, 1000, 4, 5, 10000, 6));

二》:arguments.callee()它可以完成调用当前被调用的函数。
   这个属性非常少用,可以用它来完成匿名的函数的递归调用。

如:
var result=(function(x)
{
    if (x <= 1) return 1;
    return x * arguments.callee(x - 1);
})(6);
document.writeln("the recursive result is: "+result);
 
三》:JavaScript不检测传递参数的类型,参数的类型检测,和函数对参数的要求都是由用户自己完成的;
 
1>:要求用户输入元素是数字的数组。
function sumArrayElements(a)
{
    if ((a instanceof Array) ||
    (a && typeof a == "object" && "length" in a))//要求输入数组
    {
        var total = 0;
        for(var i = 0; i < a.length; i ++ )
        {
            var element = a[i];
            // 忽略空值和未定义的值
            if ( ! element) continue; 
            if (typeof element == "number")//要求输入的数组元素必须是数字
            total += element;
            else
            throw new Error("all array elements must be numbers");
        }
        return total;
    }
    else throw new Error("argument must be an array");
}
document.writeln(sumArrayElements([1,2,4,6,7]));
document.writeln(sumArrayElements([1,"dengsenhua",4,6,7]));//不符合参数要求将抛出错误
 
2>:定义函数要求用户输入对象
function writeProperties(name, age, gender)
{
    document.writeln("name: " + name + "age: " + age + "gender: " + gender);
}
function writePeopleInfo(people)
{
    if(typeof people != "object")
    throw new Error("the args must be an array!");
    else
    //在这里有定义传入对象的属性,使用逻辑操作符||来完成给参数赋一个默认值
    writeProperties(people.name, people.age || 0, people.gender || "Male");
}
var ap ={name : "dengsenhua", age : 20};
writePeopleInfo(ap);
 
原创粉丝点击