javascript随心总结 arguments,call与apply
//js杂谈 //主要想到什么就写下来 //测试的版本还是chrome 多少忘了 //第一个arguments //第一个作用 var toString={}.toString; var slice=[].slice; function aa(){ console.info(arguments.callee);//返回的是这函数aa引用 //下面两个证明他是非常像数组 console.info(arguments); console.info(arguments.length); //为什么不是数组呢 console.info(toString.call(arguments));//[object Arguments] 到此如何 //转化为数组//突然想到为什么能转化数组- -,写着写着就想到了这个 console.info(slice.call(arguments)); console.info(toString.call(slice.call(arguments)));//[object Array] } aa(); //有什么用呢,递归有用 //1-n的乘法 function bb(n){ if(n==1){ return 1; } return n*arguments.callee(n-1); } console.info(bb(5));// 是不是特别像数组 但不是真正的数组 //还有strict mode ,会被禁用,不过严格模式在火狐下会有bug //第二个 看过我以前写的博客的朋友,都应听到类数组这个东东 //像数组的对象 aa("a","b","c","d"); //好吧我们将其变为真的数组 //我记得在数组总结中有这样的方法slice //当然根据arguments可实现像java这样的重载功能 //就是根据arguments参数长度,和其值执行不同的操作 //不地感觉怎么就是感觉不妥 = = //第二个就是call 与apply //二者有一个不同,就是第一个要一个一个的传参,第二个可以传个arguments //传参不是这两个函数的真面目 //可以随时函数执行的上下文环境 是不是很厉害 var x="window"; var obj1={ x:"xx", xxxx:window.alert, xx:function(){ alert(this.x); }, xxx:function(){ //alert(this);//object alert(x); } }; var obj2={ x:"xx2", xx:function(){ alert(this.x); }, xxx2:function(){ alert(x); } }; //看变化 obj1.xx(); obj1.xx.call(this); obj1.xx.call(obj2); //再来三个,有什么差别 //obj1.xxx(); //obj1.xxx.call(this); //obj1.xxx.call(obj2); //弹出来都是window //alert方法在window,所以这个上下文 //上下文环境由调用时决定 //感觉也可以离解为一个方法里又包了一个alert函数,由闭包的意思,所以上下文为window //若有错误请指出 var a=window.alert; console.info(a); //a.call(obj1,x);//我想是js原生的一些方法不允许修改,想证明就是不行呢 //到此结束
相关推荐
nmgxzm00 2020-11-10
ifconfig 2020-10-14
hhanbj 2020-11-17
zfszhangyuan 2020-11-16
古叶峰 2020-11-16
一个智障 2020-11-15
jipengx 2020-11-12
81427005 2020-11-11
xixixi 2020-11-11
游走的豚鼠君 2020-11-10
苗疆三刀的随手记 2020-11-10
Web卓不凡 2020-11-03
小飞侠V 2020-11-02
帕尼尼 2020-10-30
爱读书的旅行者 2020-10-26
帕尼尼 2020-10-23
杏仁技术站 2020-10-23
淼寒儿 2020-10-22