callee、caller 与 arguments有什么关系?
认证0级讲师
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返回调用者,如:
caller
var test = function(){ console.log(test.caller); }; var handler = function(){ test(); }; handler(); //caller is handler
这个时候,test.caller就是handler函数本身。
test.caller
handler
callee是被执行的function对象,他是arguments的一个属性如:
callee
function
arguments
var test = function(){ console.log(arguments.callee); }; test(); //callee is test
这里,arguments.callee就是test函数本身
arguments.callee
test
callee, caller不建议使用,因为这两个属性在严格模式(use strict)下都不存在。譬如:
use strict
var test = function(){ 'use strict'; console.log(test.caller); }; var handler = function(){ test(); }; handler(); //error occurred
这样是会报错的
caller 向上找他爹 callee 向上找他自己
向上找他爹
向上找他自己
不过还是强烈建议 “放弃吧” strict模式,都已经不建议用了!
strict
结果返回:
caller返回一个函数的引用,这个函数调用了当前的函数
结果返回:
callee返回正在执行的函数本身的引用,它是arguments的一个属性
caller
返回调用者,如:callee
是被执行的function
对象,他是arguments
的一个属性如:callee
,caller
不建议使用,因为这两个属性在严格模式(use strict
)下都不存在。譬如:caller
向上找他爹
callee
向上找他自己
不过还是强烈建议 “放弃吧”
strict
模式,都已经不建议用了!