//依据参数列表来严格地检查一个变量列表的类型 
function strict( types, args ) { 
    //确保参数的数目和类型核匹配 
    if ( types.length != args.length ) { 
        //如果长度不匹配,则抛出异常 
        throw "Invalid number of arguments. Expected " + types.length + 
            ", received " + args.length + " instead."; 
        } 
    //遍历每一个参数,检查基类型 
    for ( var i = 0; i  < args.length; i++ ) { 
        //如JavaScript某一项类型不匹配,则抛出异常 
        if ( args[i].constructor != types[i] ) { 
            throw "Invalid argument type. Expected " +  
                types[i].name +", received " +  
                args[i].constructor.name + " instead."; 
        } 
    } 

//用来打印出用户列表的一个简单函数 
function userList( prefix, num, users ) { 
    //确保prefix是一个字符串,num是一个数字, 
    //且user是一个数组 
    strict( [ String, Number, Array ], arguments );  //这里的arguments值是从哪传来的? 
     
    //循环处理num个用户 
    for ( var i = 0; i  < num; i++ ) { 
        //显示一个用户的信息 
        print( prefix + ": " + users[i] ); 
function userList( prefix, num, users ) { 
    //确保prefix是一个字符串,num是一个数字, 
    //且user是一个数组 
    strict( [ String, Number, Array ], arguments );  //这里的arguments值是从哪传来的? 
    

解决方案 »

  1.   

    js语言是一解释性语言,它的运行状态和代码定义状态是有区别的,比如我定义了一个函数func(arg1,agr2)
    可以接受两个参数,但运行是可能用户输入了三个参数过来。arguments是函数运行时编译器自动为函数分配
    的数据,存储了用户实际输入的参数,是一个类似数组的结构,每一函数在运行是都会有一arguments,你可以用
    下面的代码测试一下
    function myfunc(arg1,arg2){
       alert(arguments.length);
       alert(arguments[1]);
    }
    myfunc(1,2,3,4,5);
      

  2.   

    function userList( prefix, num, users ) {  
        //确保prefix是一个字符串,num是一个数字,  
        //且user是一个数组  
        strict( [ String, Number, Array ], arguments );  //这里的arguments值是从哪传来的?  
    arguments就是传入当前函数的所有参数的集合
      

  3.   

    明白了,arguments存储了所有传来的参数!上面测试结果是:5  2