Define a function named "myFunction", and make it display "Hello World!" in the <p> element. Hint: Use the function keyword to define the function (followed by a name, followed by parentheses). Place the code you want executed by the function, inside curly brackets. Then, call the function.
Named Functions: In JavaScript, named functions are simply a way of referring to a function that employs the function keyword followed by a name that can be used as a callback to that function. Normal functions with a name or identifier are known as named functions.
call() accepts a list of values while apply() accepts an array, like so: //call accepts a list of values printName. call(valueOfThis, 1, 2, 3); //apply accepts an array of values printName. apply(valueOfThis, [1, 2, 3]);
In ES5 and above, there is no access to that information.
In older versions of JS you can get it by using arguments.callee
.
You may have to parse out the name though, as it will probably include some extra junk. Though, in some implementations you can simply get the name using arguments.callee.name
.
Parsing:
function DisplayMyName()
{
var myName = arguments.callee.toString();
myName = myName.substr('function '.length);
myName = myName.substr(0, myName.indexOf('('));
alert(myName);
}
Source: Javascript - get current function name.
For non-anonymous functions
function foo()
{
alert(arguments.callee.name)
}
But in case of an error handler the result would be the name of the error handler function, wouldn't it?
All what you need is simple. Create function:
function getFuncName() {
return getFuncName.caller.name
}
After that whenever you need, you simply use:
function foo() {
console.log(getFuncName())
}
foo()
// Logs: "foo"
According to MDN
Warning: The 5th edition of ECMAScript (ES5) forbids use of arguments.callee() in strict mode. Avoid using arguments.callee() by either giving function expressions a name or use a function declaration where a function must call itself.
As noted this applies only if your script uses "strict mode". This is mainly for security reasons and sadly currently there's no alternative for this.
The getMyName
function in the snippet below returns the name of the calling function. It's a hack and relies on non-standard feature: Error.prototype.stack
. Note that format of the string returned by Error.prototype.stack
is implemented differently in different engines, so this probably won't work everywhere:
function getMyName() {
var e = new Error('dummy');
var stack = e.stack
.split('\n')[2]
// " at functionName ( ..." => "functionName"
.replace(/^\s+at\s+(.+?)\s.+/g, '$1' );
return stack
}
function foo(){
return getMyName()
}
function bar() {
return foo()
}
console.log(bar())
About other solutions: arguments.callee
is not allowed in strict mode and Function.prototype.caller
is non-standard and not allowed in strict mode.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With