arguments callee(求助:js下面这行代码activeXString是什么 typeof arguments.callee.activeXString!=“string“)
本文目录
- 求助:js下面这行代码activeXString是什么 typeof arguments.callee.activeXString!=“string“
- with(arguments.callee)是什么意思
- caller和callee的区别
- 下面代码中 arguments.callee.offset是怎么解释offset属性代表什么
- javascript中offset什么意思啊如下arguments.callee.offset中offset的具体含义是什么啊,求详解!
- 关于JavaScript中argument.caller的理解问题!谢谢!
- 火狐和ie下获取javascript 获取event的方法(推荐)
求助:js下面这行代码activeXString是什么 typeof arguments.callee.activeXString!=“string“
这里的activeXString是只createXHR对象的一个属性,自定义的.总的来说activeXString一般只会有2个类型的值,除非有在其他地方赋值...这2个类型的值是null,和versions数组中的某一个这个函数的作用就是创建一个异步请求的对象.从函数开始if(typeofXMLHttpRequest!="undefined"){ 先判断了是否存在XMLHttpRequest如果有 就直接返回他创造的对象.}else if(typeofActiveXObject!="undefined"){ 然后判断了是否存在ActiveXObject如果存在,则创建他的对象,但这个对象需要一个传入参数,如下:new ActiveXObect(versions); 需要versions数组中的某个项,数组的3个项分别对应3个版本.从最高版本开始创建,如果创建失败,就被catch抓住,不处理,继续循环.直到循环创建成功为止,然后给自己添加一个属性叫activeXStringarguments.callee.activeXStringarguments是javascript函数的内置对象,代表传入参数的集合callee就代表对象本身即new createXHR()如果3次循环完了都没找到,就会抛出thrownewError("NoXHRobjectavailable.");的错误.其实你把arguments.callee.activeXString换成this.activeXString就容易理解了.
with(arguments.callee)是什么意思
资料上说 callee 返回正被执行的 Function 对象,也就是所指定的 Function 对象的正文。 callee 属性是 arguments 对象的一个成员,它表示对函数对象本身的引用,这有利于匿名 函数的递归或者保证函数的封装性,例如下边示例的递归计算1到n的自然数之和。而该属性 仅当相关函数正在执行时才可用。还有需要注意的是callee拥有length属性,这个属性有时候 用于验证还是比较好的。arguments.length是实参长度,arguments.callee.length是 形参长度,由此可以判断调用时形参长度是否和实参长度一致
caller和callee的区别
calleecallee是对象的一个属性,该属性是一个指针,指向参数arguments对象的函数首先我们来写个阶成函数:function chen(x){if (x《=1) {return 1;} else{return x*chen(x-1);};};从这个函数中可以看出来,用到了递归函数,要是改变了函数名,里面的函数名也要随着改变,这样很不方便所以我们用callee来试试function chen(x){if (x《=1) {return 1;}else{return x*arguments.callee(x-1);};};我们来分析一下为什么这样写:根据callee的定义,可以看出来callee是arguments对象的一个属性,指向arguments对象的函数,这个函数就是chen(chen=arguments.callee),这样解释应该可以理解了吧。callercaller是函数对象的一个属性,该属性保存着调用当前函数的函数的引用(指向当前函数的直接父函数)先来个例子吧function a(){b();};function b(){alert(b.caller);};a(); //结果就是弹出函数a和内容我们来解释一下吧,首先函数b的属性caller调用当前函数b的函数引用a(就是指向当前函数b的父函数a),所以结果就是弹出 function a(){ b();};那么了解了caller和callee,那么可以不可以将二者结合在一起来使用呢function b(){alert(b.caller);};从这个代码可以看出b函数中调用了b函数名,这样当函数名改变时就很不方便,我们需要替换里面的那个b前面我们知道用什么方法可以指向当前对象,下面我们就来修改一下:(function a(){b();})();function b(){alert(arguments.callee.caller);};从代码中可以看出我们用arguments.callee代替了b函数
下面代码中 arguments.callee.offset是怎么解释offset属性代表什么
该函数以指定的引用为参照系,通过给定偏移量得到新的引用。返回的引用可以为一个单元格或单元格区域。并可以指定返回的行数或列数。语法OFFSET(reference,rows,cols,height,width)Reference 作为偏移量参照系的引用区域。Reference 必须为对单元格或相连单元格区域的引用;否则,函数 OFFSET 返回错误值 #VALUE!。Rows 相对于偏移量参照系的左上角单元格,上(下)偏移的行数。如果使用 5 作为参数 Rows,则说明目标引用区域的左上角单元格比 reference 低 5 行。行数可为正数(代表在起始引用的下方)或负数(代表在起始引用的上方)。Cols 相对于偏移量参照系的左上角单元格,左(右)偏移的列数。如果使用 5 作为参数 Cols,则说明目标引用区域的左上角的单元格比 reference 靠右 5 列。列数可为正数(代表在起始引用的右边)或负数(代表在起始引用的左边)。Height 高度,即所要返回的引用区域的行数。Height 必须为正数。Width 宽度,即所要返回的引用区域的列数。Width 必须为正数。说明如果行数和列数偏移量超出工作表边缘,函数 OFFSET 返回错误值 #REF!。如果省略 height 或 width,则假设其高度或宽度与 reference 相同。函数 OFFSET 实际上并不移动任何单元格或更改选定区域,它只是返回一个引用。函数 OFFSET 可用于任何需要将引用作为参数的函数。例如,公式 SUM(OFFSET(C2,1,2,3,1)) 将计算比单元格 C2 靠下 1 行并靠右 2 列的 3 行 1 列的区域的总值。该函数的意思是以"进口数量"工作表的D31单元格为参照,0表示偏移的行数(同一行),"综合!$A$3"表示以"综合"工作表A3单元格的数值为偏移的列数,后面那个1表示1行,本来还有一个参数,省略了也相当于1(表示1列)。所以,当"综合"工作表A3单元格的数值为1时,公式的实际结果就是"进口数量"工作表E31单元格的值。
javascript中offset什么意思啊如下arguments.callee.offset中offset的具体含义是什么啊,求详解!
/*不知道楼主的程序是要做什么……不过我看到offset首先想到css的偏移量。callee 属性是 arguments 对象的一个成员,该属性仅当相关函数正在执行时才可用。callee 属性的初始值是正被执行的 Function 对象。这将允许匿名函数成为递归的。*//*IE、Firefox3及更高和Opera9.5及更高为每一个元素提供了一个getBoundingClientRect()方法。这个方法返回一个矩形对象,含4个属性:left、top、right和bottom。这些属性给出了元素在页面中相对于视口的位置。但IE认为左上角坐标为(2,2),其他浏览器认为是(0,0)。*/ //所以我用过的方法是这样的(获取元素大小):function getBoundingClientRect(element){ var scrollTop = document.documentElement.scrollTop; var scrollLeft = document.documentElement.scrollLeft; if(element.getBoundingClientRect){ If(typeof arguments.callee.offset != "number"){ var temp = document.createElement("div"); temp.style.cssText = "position:absolute;left:0;top:0;"; document.body.appendChild(temp); arguments.callee.offset = -temp.getBoundingClientRect().top - scrollTop; document.body.removeChild(temp); temp = null; } var rect = element.getBoundingClientRect(); var offset = arguments.callee.offset; return{ left: rect.left + offset, right: rect.right + offset, top: rect.top + offset, bottom: rect.bottom + offset }; }else{ var actualLeft = getElementLeft(element); var actualTop = getElementTop(element); return{ left: actualLeft - scrollLeft, right: actualLeft + element.offsetWidth - scrollLeft, top: actualTop - scrollTop, bottom: actualTop + element.offsetHeight - scrollTop } } }
关于JavaScript中argument.caller的理解问题!谢谢!
首先要分清caller和callee,arguments.callee返回当前正在执行的函数,function.caller返回函数的调用体所在函数。
随便弄了个示例代码
function parentCheck() { check(""); function check() { subCheck(); function subCheck() { console.log(arguments.callee); console.log(subCheck.caller.caller) } }}parentCheck();
arguments.callee返回subCheck的函数体,subCheck.caller返回调用subCheck的函数,即check,而再往上一层,subCheck.caller.caller就是返回调用check的函数体,也就是parentCheck。那如果是继续往上一层呢?subCheck.caller.caller.caller?就会变成null。书里也有讲,arguments.caller在非严格模式下永远是undefined。我们就可以判断值是null还是undefined来区分arguments.caller和函数的caller。
JS的函数是可以无限嵌套的,就构成了一棵树,而function.caller就提供了一个访问父节点的方法,通过灵活应用function.caller,我们甚至可以用脚本画出整棵树,只要我们在任意地方成功插入一段JS代码,又或者是,像网站统计之类的第三方代码,我们就能窥视其他代码。
所以为了安全期间,严格模式禁止调用caller、callee、arguments变量,在浏览器中的报错为
Uncaught TypeError: ’caller’, ’callee’, and ’arguments’ properties may not be accessed on strict mode functions or the arguments objects for calls to them
个人敝见,无书可循,希望对您有帮助
火狐和ie下获取javascript 获取event的方法(推荐)
javascript获取event先从一个简单的例子说起,一个简单的button控件如下:《inputtype=’button’name=’mybtn’id=’mybtn’onclick=’myFunc()’/》然后为其注册事件,这样的情况,怎么在javascript里获取event呢,特别是firefox的情况。请看:《scripttype=’text/javascript’》functionmyFunc(){varev=window.event||arguments.callee.caller.arguments,et=ev.srcElement||ev.target;alert(et.tagName);}《/script》不出意外的话,在ie/ff下,上面例子都将输出INPUT,即是触发click事件节点的标签名,ie的event获取这里就不说了,重点说说ff下的情况。这里的arguments.callee.caller.arguments看起来又长又怪,为什么在firefox的情况下,这个东西就是event呢?首先得了解arguments.callee是什么东西,caller又是什么样的属性?argments.callee就是函数体本身,arguments.callee.caller就是函数体的调用函数体简单例子如下:《scripttype=’text/javascript’》functiona(){b();}functionb(){alert(b===arguments.callee)alert(b.caller===a)alert(arguments.callee.caller===a)}a();《/script》不出意外,上面的例子将输出3个true,表明当a()调用时,函数b与函数a的关系。好,弄清楚了arguments.callee与caller,我们再把原先的例子改改《scripttype=’text/javascript’》functionmyFunc(){alert(arguments.callee.caller.toString())varev=window.event||arguments.callee.caller.arguments,et=ev.srcElement||ev.target;}《/script》我们把argument.callee.caller的函数体输出,看看到底在ie和ff下有何区别.可以看到ie下输出为functionanonymous(){myFunc()}ff下输出为functiononclick(event){myFunc();}由此看出在html控件中直接注册事件在ie/ff下表现的不同,ie下定义了一个匿名函数,内部再执行用户定制的函数(myFunc),而ff下则有所不同,首先ff下定义了一个与节点事件同名的函数,这里是onclick事件,所以是functiononclick,然后event作为一个参数传入,内部再执行myFunc.所以当事件触发时,在myFunc里,argument.callee.caller就是指向functiononclick,当然,argument.callee.caller.arguments即为event了.以上这篇火狐和ie下获取javascript获取event的方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
更多文章:
maxdos v8(Maxdos V8怎样网刻,不是5.8教程)
2024年2月5日 02:15
尘埃2怎么用手柄?求尘埃2的键盘飘移方法,别说原理,只说按键顺序之类
2024年3月29日 00:55
wowshell(怎样退出自动加入组队频道我用wowshell魔兽精灵,每次上线就会自动加入组队频道,我想知道怎样不自动加入)
2024年6月26日 06:27
英雄战歌官网(有一个单机版的手机游戏做的和梦三国似的那个叫什么)
2024年6月12日 20:20
《上古卷轴6:阿利诺》的故事背景是否主要有关先祖神州和精灵人?为什么上古卷轴6会拖这么久
2024年6月2日 13:35
撸的时候x幻想的对象不是女朋友,这正常吗?我该如何解释性幻想和现实之间的区别呢
2024年7月20日 16:06
d3dx9_43 dll放哪里(文件已损坏或丢失d3dx943.dl应该放在哪里win7系统)
2024年7月20日 11:35
每天挣3元一5元的软件(有什么软件像百度知道一样每天可以赚2~3块钱,靠谱的)
2024年10月20日 06:05
windows installer清理实用工具(请问Windows Install clean up怎么用)
2024年3月27日 18:20