callee的复杂用法
callee的复杂用法
CSS
/*
清晰网
kixi.com.cn
从javascript开始
*/
JavaScript
var getFnName = function (callee) {
//把callee字符串化并且去掉空格回车等
var _callee = callee.toString().replace(/[\s\?]*/g, ""),
comb = _callee.length >= 50 ? 50 : _callee.length;
_callee = _callee.substring(0, comb);
//通过正则截取调用函数的函数名称
var name = _callee.match(/^function([^\(]+?)\(/);
if (name && name[1]) {
return name[1];
}
//caller的用法,请参考一下
var caller = callee.caller,
_caller = caller.toString().replace(/[\s\?]*/g, "");
var last = _caller.indexOf(_callee),
str = _caller.substring(last - 30, last);
name = str.match(/var([^\=]+?)\=/);
if (name && name[1]) {
return name[1];
}
return "anonymous"
};
//有名函数(函数定义)
function hasname() {
var aa = getFnName(arguments.callee)
//+++++++++++++++++++++++++++++++++
alert(aa)
}
function kkk(){
hasname();
}
kkk();
//匿名函数(函数表达式)
var noname = function () {
//+++++++++++++++++++++++++++++++++
var bb = getFnName(arguments.callee)
//+++++++++++++++++++++++++++++++++
alert(bb)
};
noname();
//闭包
(function () {
//+++++++++++++++++++++++++++++++++
var cc = getFnName(arguments.callee)
//+++++++++++++++++++++++++++++++++
alert(cc)
})();