如EXTJS中的一段简单代码
Ext.MessageBox.prompt('propmt','输入',function(e,text){
       MessageBox.alert('Result','你选择的是'+e+',你输入的是'+text)
});
那个function(e,text)  定义了2个参数,可调用这个函数时,程序怎么知道传给e是什么,text是什么,是否预先定义好了实参,怎么知道它怎么定义的,有几个参数呢?

解决方案 »

  1.   

    js用的是弱类型,各个类型之间都有转换规则的
    然后,js的函数在被调用时总共会产生25个参数,你没有传入的参数都用null填充,所以即使定义函数时没有列参数表,在调用时仍然可以给传参数进去。所有的25个参数都被按顺序装在一个数组arguments里面,在函数里可以随时取用。只不过你定义了参数表后让代码具有更好的可读性。
      

  2.   

    纠正一下,没有传入的参数都会用undefined填充
      

  3.   

    那个function(e,text)  定义了2个参数,可调用这个函数时,程序怎么知道传给e是什么,text是什么,是否预先定义好了实参,怎么知道它怎么定义的,有几个参数呢?
    =================================================
    你猜对了,就是预先定义好了实参.至于怎么定义,几个参数,只能去看看api,或者源码了.
    简单的callback实现:        <script>
    var foo = function(o,fn){
    if(fn && typeof fn == 'function'){
    fn.apply(o,[o.arg1,o.arg2])
    }
    } foo({arg1:'hi~!',arg2:'hey~!'},function(a1,a2){alert(a1+a2)});
    foo({arg1:'hello',arg2:'world'},function(x1,x2){alert(x1+' '+x2)});
            </script>