`
davidxiaozhi
  • 浏览: 241453 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

arguments.callee.caller.arguments[0]

阅读更多

今天在网上看见这种调用,据说是解决火狐下事件或得问题的,var evt=window.event|arguments.callee.caller.arguments[0]

argument.callee就是函数本身,caller函数的调用函数.

 

 

<script type='text/javascript'>
function myFunc(){
    alert(arguments.callee.caller.toString())
   
var ev = window.event || arguments.callee.caller.arguments[0]
        ,et 
= ev.srcElement || ev.target;
}
</script>

我们把argument.callee.caller的函数体输出,看看到底在ie和ff下有何区别.

可以看到ie下输出为

function anonymous(){
   myFunc()
}

ff下输出为

function onclick(event){
    myFunc();
}

在html控件中直接注册事件在ie/ff下表现的不同, ie下定义了一个匿名函数,内部再执行用户定制的函数(myFunc),而ff下则有所

不同,首先ff下定义了一个与节点事件同名的函数,这里是onclick事件,所以是function onclick,然后event作为一个参数传入,内部再执行myFunc.

所以当事件触发时,在myFunc里,argument.callee.caller就是指向function onclick,当然,argument.callee.caller.arguments[0]即为event了.

分享到:
评论

相关推荐

    JavaScript arguments.callee作用及替换方案详解

    JavaScript中的`arguments.callee`是一个在函数内部引用当前正在执行的函数对象的属性。这个属性在函数递归、保持函数封装性以及匿名函数自我引用等场景中尤其有用。然而,由于`arguments`对象是一个相对昂贵的操作...

    js代码-arguments.callee

    总的来说,虽然`arguments.callee`在过去的JavaScript开发中起到了重要作用,但随着语言的进化,开发者应逐渐适应不依赖`arguments.callee`的编程风格,充分利用ES6及更高版本提供的新特性,编写更加高效、简洁的...

    js的隐含参数(arguments,callee,caller)使用方法.docx

    JavaScript中的隐含参数`arguments`, `...然而,由于`arguments.callee`在ES5后的限制,现在更倾向于使用其他技巧如命名函数表达式、闭包或`Array.from()`等方法来实现类似的功能,以保持代码的清晰性和可维护性。

    js的隐含参数(arguments,callee,caller)使用方法

    在JavaScript编程中,arguments、caller和callee是函数对象自带的三个隐含参数,它们为开发者提供了额外的函数执行信息,尤其在处理函数参数、递归调用以及调用栈追踪时非常有用。下面详细介绍这些隐含参数的使用...

    javascript中arguments,callee,caller详解

    在代码示例中,作者通过创建一个简单的HTML页面和JavaScript脚本,展示了如何利用console.log()函数和instanceof操作符来判断arguments对象的类型,并且还演示了如何使用arguments.callee和child.caller来获取当前...

    关于arguments,callee,caller等的测试

    sTemp+=arguments.callee + “\n\n”; sTemp+=”传入参数的长度:\n”; sTemp+=arguments.length+”\n\n”; sTemp+=”传入参数的内容:\n”; for (var i=0;i [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

    js中arguments,caller,callee,apply的用法小结.docx

    然而,由于这种用法可能导致难以调试的代码,ES5严格模式下会禁止使用arguments.callee。 4. **apply方法** apply是Function对象的一个方法,允许改变函数调用的上下文(即this值)以及传入参数。它接受两个参数:...

    javascript中callee与caller的用法和应用场景

    if(n &gt; 0) return n + arguments.callee(n - 1); return 0; })(10); ``` 在这个例子中,`arguments.callee`使得即使是匿名函数,也能在递归调用中正确引用自身,而不依赖外部定义的函数名。这不仅让代码更加简洁...

    Arguments对象作用深度研究.pdf

    其次,arguments.callee属性是Arguments对象的一个独特功能,它允许在函数内部引用正在执行的函数自身。这对于实现递归调用特别有用,因为函数可以直接通过arguments.callee调用自己,而无需保存函数名称的引用。...

    js中的caller和callee属性介绍和例子

    `arguments.length`返回的是实际传递给函数的参数数量,而`arguments.callee.length`返回的是函数定义时接受的参数数量。 ```javascript function calleeLengthDemo(arg1, arg2) { if (arguments.length == ...

    JavaScript中callee和caller的区别与用法实例分析

    console.info(arguments.callee.caller); } ``` 4. 实例:斐波那契数列 斐波那契数列可以通过递归方法实现,`callee`在这里可以用于避免重复计算。通过缓存结果,我们可以提高效率: ```javascript var result = ...

    Javascript - 全面理解 caller,callee,call,apply (转载)

    // 在旧版本浏览器中,arguments.callee会指向这个匿名函数 ``` 接下来,我们讨论`call`和`apply`,它们是JavaScript中函数调用的两种特殊方式。`call`和`apply`的主要区别在于传递参数的方式:`call`接受一个参数...

    火狐和ie下获取javascript 获取event的方法(推荐)

    因此,在`myFunc()`内部,`arguments.callee.caller`指向`onclick`函数,而`arguments.callee.caller.arguments[0]`就是`event`对象。 总结一下,获取`event`对象的方法在不同的浏览器环境中有所不同: - Internet...

    火狐下event的使用

    可以考虑使用`arguments.callee.caller.arguments[0]`来代替,这是因为`arguments.callee.caller`可以指向调用当前函数的上一个函数,而`caller.arguments[0]`则通常为事件对象。 ```javascript function ...

    js中arguments的用法(实例讲解).docx

    6. **`arguments.callee`和`arguments.caller`**: 在ES5及之前,`arguments.callee`引用当前执行的函数,`arguments.caller`则返回调用当前函数的函数。然而,由于这些属性可能导致性能问题和难以调试的代码,它们...

    JoV5#blog#4.7 【ES5】严格模式与闭包1

    3. 访问arguments.callee或函数的caller属性将导致“类型错误(TypeError)” 4. 以下代码的执行效果与非严格模式并不一致:js

Global site tag (gtag.js) - Google Analytics