有可能这样做吗:
myfile.js:
function foo() {
alert(<my-function-name>);
// pops-up "foo"
// or even better: "myfile.js : foo"
}
我的堆栈中有Dojo和jQuery框架,所以如果它们中的任何一个使工作更容易,都可以使用它们。
有可能这样做吗:
myfile.js:
function foo() {
alert(<my-function-name>);
// pops-up "foo"
// or even better: "myfile.js : foo"
}
我的堆栈中有Dojo和jQuery框架,所以如果它们中的任何一个使工作更容易,都可以使用它们。
当前回答
答案很简单:alert(arguments.callee.name);
其他回答
2016年的信息是真实的。
函数声明的结果
歌剧的结果
>>> (function func11 (){
... console.log(
... 'Function name:',
... arguments.callee.toString().match(/function\s+([_\w]+)/)[1])
... })();
...
... (function func12 (){
... console.log('Function name:', arguments.callee.name)
... })();
Function name:, func11
Function name:, func12
Chrome中的结果
(function func11 (){
console.log(
'Function name:',
arguments.callee.toString().match(/function\s+([_\w]+)/)[1])
})();
(function func12 (){
console.log('Function name:', arguments.callee.name)
})();
Function name: func11
Function name: func12
NodeJS的结果
> (function func11 (){
... console.log(
..... 'Function name:',
..... arguments.callee.toString().match(/function\s+([_\w]+)/)[1])
... })();
Function name: func11
undefined
> (function func12 (){
... console.log('Function name:', arguments.callee.name)
... })();
Function name: func12
不能在Firefox中工作。未经IE和Edge测试。
函数表达式的结果
NodeJS的结果
> var func11 = function(){
... console.log('Function name:', arguments.callee.name)
... }; func11();
Function name: func11
Chrome中的结果
var func11 = function(){
console.log('Function name:', arguments.callee.name)
}; func11();
Function name: func11
不工作在Firefox, Opera。未经IE和Edge测试。
注:
匿名函数没有意义去检查。 测试环境
~ $ google-chrome --version
Google Chrome 53.0.2785.116
~ $ opera --version
Opera 12.16 Build 1860 for Linux x86_64.
~ $ firefox --version
Mozilla Firefox 49.0
~ $ node
node nodejs
~ $ nodejs --version
v6.8.1
~ $ uname -a
Linux wlysenko-Aspire 3.13.0-37-generic #64-Ubuntu SMP Mon Sep 22 21:28:38 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
这应该做到:
var fn = arguments.callee.toString().match(/function\s+([^\s\(]+)/);
alert(fn[1]);
对于调用者,只需使用caller. tostring()。
在ES5及以上版本中,无法访问该信息。
在旧版本的JS中,你可以使用arguments.callee来获取它。
不过,您可能需要解析这个名称,因为它可能包含一些额外的垃圾。不过,在某些实现中,您可以使用arguments.callee.name简单地获取名称。
解析:
function DisplayMyName()
{
var myName = arguments.callee.toString();
myName = myName.substr('function '.length);
myName = myName.substr(0, myName.indexOf('('));
alert(myName);
}
获取当前函数名。
arguments对象是一个局部变量,可在所有非箭头函数中使用。 可以使用函数的arguments对象来引用函数内部的参数。 它对调用函数的每个参数都有条目,第一个条目的索引为0。
所以你基本上可以使用arguments。callee。name但是在命名函数内部,像这样:
function i_have_a_name() {
console.log(`My name is:`, arguments.callee.name)
}
> i_have_a_name()
My name is: i_have_a_name
不幸的是,它不能在箭头函数中使用:
const i_have_a_name = () => {
console.log(`My name is:`, arguments.callee.name)
}
> i_have_a_name()
Uncaught ReferenceError: arguments is not defined
at i_have_a_name (REPL3:2:32)
来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments
这个问题的最新答案可以在这个答案中找到: https://stackoverflow.com/a/2161470/632495
如果你不想点击:
function test() {
var z = arguments.callee.name;
console.log(z);
}