当我们需要在 JavaScript 代码中获取当前正在运行的函数的名称时,有很多方法可以实现。下面是获得当前函数名称的三种主要方法:
方法一:arguments.callee.name属性
可以使用 arguments.callee.name
属性来获取当前函数的名称。 arguments.callee
是一个指向当前正在执行的函数的指针。可以将它与 .name
属性结合使用,来获取它的名称,具体示例如下:
function getCurrentFunctionName() {
var name = arguments.callee.name;
console.log(name);
}
getCurrentFunctionName(); // 输出:getCurrentFunctionName
上述代码中,arguments.callee.name
属性返回当前正在执行的函数的名称,它会将函数名称存储在 name
变量中,最后在控制台( console )上输出它的值。
方法二:Function.prototype.name属性
Function.prototype.name
是一个返回函数的名称的内置属性。还可以使用它来获取当前执行的函数的名称。具体示例如下:
function getCurrentFunctionName() {
console.log(getCurrentFunctionName.name);
}
getCurrentFunctionName(); // 输出:getCurrentFunctionName
与方法一一样,上述示例中,getCurrentFunctionName.name
属性返回当前正在执行的函数的名称,它直接从函数对象获取名称,并在控制台上输出它的值。
示例应用
示例一:跟踪函数的执行时间
以下是一个使用 arguments.callee.name
属性和 Date 对象来记录函数的执行时间的示例。
function functionOne() {
var start = Date.now();
// 函数主体
var end = Date.now();
console.log(arguments.callee.name + ' took ' + (end - start) + 'ms to execute.');
}
该示例使用 Date.now()
获取当前时间,并在函数的开始和结束时通过控制台输出函数名称以及函数执行时间。
示例二:记录函数执行堆栈
以下是一个使用 Function.prototype.name
属性记录函数执行堆栈的示例。
function functionOne() {
console.log(getCurrentFunctionName());
}
function functionTwo() {
functionOne();
}
functionTwo(); // 输出:functionOne
function getCurrentFunctionName() {
return getCurrentFunctionName.caller.name || 'no caller';
}
该示例中,当 functionOne()
被调用时,它输出 getCurrentFunctionName()
的名称。在 functionTwo()
内部调用 functionOne()
后, getCurrentFunctionName()
输出了它的调用者的名称。通过这种方式,可以获取函数执行的完整堆栈,并显示它们的名称。