javascript闭包 - Javascript中callee与caller的用法和应用场景是什么?
PHP中文网
PHP中文网 2017-04-10 15:45:53
[JavaScript讨论组]

callee、caller 与 arguments有什么关系?

PHP中文网
PHP中文网

认证0级讲师

全部回复(3)
高洛峰
var a = function() {   
    alert(a.caller);   
}   
var b = function() {   
    a();   
}   
b();  

结果返回:

var b = function() {   
    a();   
} 

caller返回一个函数的引用,这个函数调用了当前的函数

var a = function() {   
    alert(arguments.callee);   
}   
var b = function() {   
    a();   
}   
b(); 

结果返回:

var a = function() {   
    alert(arguments.callee);   
}   

callee返回正在执行的函数本身的引用,它是arguments的一个属性

黄舟

caller返回调用者,如:

var test = function(){
    console.log(test.caller);
};

var handler = function(){
    test();
};

handler(); //caller is handler

这个时候,test.caller就是handler函数本身。

callee是被执行的function对象,他是arguments的一个属性如:

var test = function(){
    console.log(arguments.callee);
};
test(); //callee is test

这里,arguments.callee就是test函数本身

callee, caller不建议使用,因为这两个属性在严格模式(use strict)下都不存在。譬如:

var test = function(){
    'use strict';
    console.log(test.caller);
};

var handler = function(){
    test();
};

handler(); //error occurred

这样是会报错的

迷茫

caller 向上找他爹
callee 向上找他自己

不过还是强烈建议 “放弃吧” strict模式,都已经不建议用了!

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号