关于JavaScript中argument.caller的理解问题!谢谢! 10

我想问的是,怎么分清了argument.caller和函数的caller属性,还有为什么第三方代码就不能在相同的环境里窥视其它代码了!谢谢!... 我想问的是,怎么分清了argument.caller和函数的caller属性,还有为什么第三方代码就不能在相同的环境里窥视其它代码了!谢谢! 展开
 我来答
郑郑某
推荐于2018-02-27 · TA获得超过574个赞
知道小有建树答主
回答量:98
采纳率:0%
帮助的人:116万
展开全部

    首先要分清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

个人敝见,无书可循,希望对您有帮助

匿名用户
2015-01-10
展开全部
是arguments.callee,你都打错了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式