<script type="text/javascript">alert(1,function(){alert(2);});var string = "267";
var number = /(\d)\d)\d)/g;
alert(string.match(number),function(a,b,c,d){return document.write(b);});
alert(string.match(number),function(a,$1,$2,$3){return document.write($1);});
</script>①让alert弹出1的时候运行内部函数弹出2②让document.write(b)和document.write($1)生效使用参数abcd和a,$1,$2,$3谢谢

解决方案 »

  1.   

    <script type="text/javascript">
    function alerts(a,fun){
    window.alert(a);
    fun();
    }
    alerts(1,function(){alert(2);});
    var string = "267";
    var number = /(\d)(\d)(\d)/g;
    alerts(string.match(number),function(){(function(a,b,c,d){return document.write(b);})(1,2,3,4)});
    alerts(string.match(number),function(){(function(a,$1,$2,$3){return document.write($1);})(10,RegExp.$1,RegExp.$2,RegExp.$3)});
    </script>
    不明白你想做什么
      

  2.   

    你这是面试题吧_alert=alert;
     alert=function(){
        var as=[].slice.call(arguments),f=as.pop();
        console.info((as.length?as[0]:'xx'),f)
       as.length?f.apply(f,  as[0].constructor==Array? as[0]:as  ):_alert(f);
     }alert(1,function(){alert(2);});
    var string = "267";
    var number = /(\d)(\d)(\d)/;
    alert(string.match(number),function(a,b,c,d){return document.write(b);});
    alert(string.match(number),function(a,$1,$2,$3){return document.write($1);});
      

  3.   

    var as=[].slice.call(arguments),f=as.pop(); 这句是否是这个意思?
    Array.prototype.slice = function(start,end){
         var result = new Array();
         start = start || 0;
         end = end || this.length; //this指向调用的对象,当用了call后,能够改变this的指向,也就是指向传进来的对象,这是关键
         for(var i = start; i < end; i++){
              result.push(this[i]);
         }
         return result;
    }console.info这个函数起什么作用?我就知道console.logas[0].constructor==Array这个的意思是指针为数组?
    xx什么意思?
    另外这个火狐能用,到IE就无效了。
      

  4.   

    别人出的题function(){(function(a,b,c,d){return document.write(b);})(1,2,3,4)参数就是前面的正则,改成这样function(a,b,c,d){return document.write(b);}为什么无效?
      

  5.   


    var as=[].slice.call(arguments),f=as.pop(); 
    arguments 转成数组,f取最后一个
    console.info 火狐下控制台调试用的,没用(我忘了删除 )Object.constructor ,取实例他的类
      

  6.   

    alert=function(){
    var as=[].slice.call(arguments),f=as.pop();
    as.length?f.apply(f,  as[0].constructor==Array? as[0]:as  ):_alert(f);
    }这段函数的作用是干什么的?没看明白,是重新定义alert函数的?那参数是怎么传递进去的。而且为什么只用火狐有效?
      

  7.   

    重新定义alert, 让前几个参数 再给最后一个参数执行 
    应该是兼容所有的浏览器吧
      

  8.   

    IE真的无效。_alert=alert;
    alert=function(){
    var as=[].slice.call(arguments),f=as.pop();
    }
    document.write(_alert("1","2","3"));外加问一下,这段代码为什么无效,您写的这段函数,我正尝试理解,但是总理解不好。
      

  9.   

    我试了下IE9以下的,要把alert ==> window.alert 就行了
    _alert=alert;
    alert=function(){
    改成 
    _alert=window.alert;
    window.alert=function(){
    -----------------------------
    document.write(_alert("1","2","3"));
    你去调用 _alert,等于调用原来的alert了,没调用到新的
     
      

  10.   

    _alert=window.alert;
    window.alert=function(){
    var as=[].slice.call(arguments),f=as.pop();
    return f;
    }
    _alert("1","2","3");让前几个参数,再给最后一个参数执行。变量f是参数合在一起,返回f应该是1、2、3为什么这么写无效?
      

  11.   


    不是和你说过了,你去调用 _alert,等于调用原来的alert了?
    如果你就要想 返回 把它连在一起可以成这样
     
    _alert=window.alert;
    window.alert=function(){
    return [].slice.call(arguments).join(',');
    }
    document.write( alert("1","2","3")) ;
      

  12.   

    麻烦你了,按我的程度理解这段函数有些难度。
    能不能再告诉下
    f.apply(f,as[0].constructor==Array? as[0]:as)这里的apply是起到将数组合并的作用吗?还是其他用途?这个我也理解不了f.apply(f,两个f加apply我没见到过,不好理解。
      

  13.   

    apply用法 你看下 这里
      

  14.   

    语法
    fun.apply(thisArg[, argsArray])参数thisArg
    在fun函数运行时指定的this值,需要注意的是,指定的this值并不一定是该函数执行时真正的this值,如果这个函数处于非严格模式下,则指定为null和undefined的this值会自动指向全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的this会指向该原始值的自动包装对象。argsArray
    一个数组对象或者类数组对象,其中的数组元素将作为单独的参数传给fun函数。如果该参数的值为null或undefined,则表示不需要传入任何参数。f.apply(f,as[0].constructor==Array? as[0]:as)
    第二个f不是this第一个f是数组末尾被删除的元素as[0].constructor==Array? as[0]:as这个是参数列表?主要是apply加第二个f不能理解。我理解下apply是将as[0]传递给第二个f 虽然理论上多少理解apply但用到实际代码确实还是不太理解。望高手指教,我实际经验太少。
      

  15.   

    语法
    fun.apply(thisArg[, argsArray])参数thisArg
    在fun函数运行时指定的this值,需要注意的是,指定的this值并不一定是该函数执行时真正的this值,如果这个函数处于非严格模式下,则指定为null和undefined的this值会自动指向全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的this会指向该原始值的自动包装对象。argsArray
    一个数组对象或者类数组对象,其中的数组元素将作为单独的参数传给fun函数。如果该参数的值为null或undefined,则表示不需要传入任何参数。f.apply(f,as[0].constructor==Array? as[0]:as)
    第二个f不是this第一个f是数组末尾被删除的元素as[0].constructor==Array? as[0]:as这个是参数列表?主要是apply加第二个f不能理解。我理解下apply是将as[0]传递给第二个f 虽然理论上多少理解apply但用到实际代码确实还是不太理解。望高手指教,我实际经验太少。
    第二个f不是this ,这里用 this,f ,都没影响 
     
    as[0].constructor==Array? as[0]:as这个是参数列表?,判断 as[0]是不是数组,是就用as[0],不是用 as
    apply在这里的应该主要是为了,参数列表以数组的形式来传给函数 ,专业的解释你还是去看 mozilla那文档
      

  16.   

    apply我能理解了
    _alert=window.alert;
    window.alert=function(){
    var as=[].slice.call(arguments),f=as.pop();
    as.length?f.apply(f,  as[0].constructor==Array? as[0]:as  ):_alert(f);
     }
    alert(1,function(){alert(2);}); 最后就是用apply劫持as.pop()这个方法,让
    f=function(){alert(2);};对吗?
      

  17.   

    这里 apply 只是为了让 f的传参数形式,变为可以直接用一个数组为传