<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谢谢
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谢谢
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>
不明白你想做什么
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);});
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就无效了。
var as=[].slice.call(arguments),f=as.pop();
arguments 转成数组,f取最后一个
console.info 火狐下控制台调试用的,没用(我忘了删除 )Object.constructor ,取实例他的类
var as=[].slice.call(arguments),f=as.pop();
as.length?f.apply(f, as[0].constructor==Array? as[0]:as ):_alert(f);
}这段函数的作用是干什么的?没看明白,是重新定义alert函数的?那参数是怎么传递进去的。而且为什么只用火狐有效?
应该是兼容所有的浏览器吧
alert=function(){
var as=[].slice.call(arguments),f=as.pop();
}
document.write(_alert("1","2","3"));外加问一下,这段代码为什么无效,您写的这段函数,我正尝试理解,但是总理解不好。
_alert=alert;
alert=function(){
改成
_alert=window.alert;
window.alert=function(){
-----------------------------
document.write(_alert("1","2","3"));
你去调用 _alert,等于调用原来的alert了,没调用到新的
window.alert=function(){
var as=[].slice.call(arguments),f=as.pop();
return f;
}
_alert("1","2","3");让前几个参数,再给最后一个参数执行。变量f是参数合在一起,返回f应该是1、2、3为什么这么写无效?
不是和你说过了,你去调用 _alert,等于调用原来的alert了?
如果你就要想 返回 把它连在一起可以成这样
_alert=window.alert;
window.alert=function(){
return [].slice.call(arguments).join(',');
}
document.write( alert("1","2","3")) ;
能不能再告诉下
f.apply(f,as[0].constructor==Array? as[0]:as)这里的apply是起到将数组合并的作用吗?还是其他用途?这个我也理解不了f.apply(f,两个f加apply我没见到过,不好理解。
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但用到实际代码确实还是不太理解。望高手指教,我实际经验太少。
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那文档
_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);};对吗?