Check if a variable is of function type or not
Tags: codenewbie, tutorial, javascript, variable
Published: 2020-11-03 10:11:26

A JavaScript function is a block of code designed to perform a particular task. It is executed when it is invoked(when something calls it). A function can be either a named or an anonymous one. This article talks about how to go about checking whether a variable is of 'Function' type or not. Before we understand the different methods of implementing this and also why anyone would want to assign a function to a variable let's look at how named and anonymous functions are declared.

# Table of Contents
* [Function declaration types](#section1)
* [Advantage of assigning a function to a variable](#section2)
* [Code](#section3)
* [Caveats](#section4)

#<span id = "section1">Function declaration types</span>
##Named Function declaration
This function has a named identifier associated with it which can be used to invoke the function
``` 
function functionName(parameter1, paramter2) {//code}
```
##Anonymous Function declaration
It is a function that is declared without any named identifier to refer to it.
```
var anon = function(){//code }
```
#<span id = "section2">Advantage of assigning a function to a variable</span>
Assigning a function to a variable allows us to pass this variable as a parameter to another function. This is particularly useful in scenarios that require runtime flexibility. You would mainly use such functions to run a load of code in response to an event firing For example, a button being clicked using an event handler.
```
myButton.onclick = function() {
 //response actions
}
```

#<span id = "section3">Code</span>
##Using instanceof operator
The instanceof operator is used to check the type of objects at run time. This operator returns a Boolean value(true or false). In the example below, an IF statement is used to check if the type of parameter passed to checkFunction() is of Function type or not.
```
//javascript check if function-Using instanceof operator
<script>

// Declare a variable and initialize it // Declare a variable and initialize it with an anonymous function
var exampleVar = function(){/* A set of statements */};

// to check a variable is of function type or not
function checkFunction(x)
{

    if(x instanceof Function) {
        document.write("Variable is of function type");
    }
    else {
        document.write("Variable is not of function type");
    }
}

// Function call
checkFunction(exampleVar);

</script>
```

##Using Strict Equality comparison (===) along with typeof operator
In JavaScript, strict equality comparison (===) Operator is used to check whether two entities are of not only equal values but also of equal type. The typeof operator returns a string which indicates the type of the unevaluated operand. Both of these operators provide a Boolean result. This result can be compared using the IF statement to check if the object type is "Function'.
//javascript check if function-Using Strict Equality comparison (===) along with typeof operator
```
<script>

// Declare a variable and initialize it with an anonymous function
var exampleVar = function(){/* A set of statements */};

// to check a variable is of function type or not
function checkFunction(x)
{
    if (typeof x === "function") {
        document.write("Variable is of function type");
    }
    else {
        document.write("Variable is not of function type");
    }
}

// Function call
checkFunction(exampleVar);

</script>
```

#Using object.prototype.toString
This method uses object.prototype.toString. Every object has a toString() method, which returns ‘[object type]’ where ‘type’ is the object type. An IF statement can be used to compare if the returned value is of the type 'Function'.
```
//javascript check if function-Using object.prototype.toString
<script>

// Declare a variable and initialize it with an anonymous function
var exampleVar = function(){/* A set of statements */};

// to check a variable is of function type or not
function checkFunction(x)
{
    if (Object.prototype.toString.call(x) == '[object Function]')
    {
        document.write("Variable is of function type");

    }
    else {
        document.write("Variable is not of function type");
    }
}

// Function call
checkFunction(exampleVar);

</script>
```

#<span id = "section4">Caveats</span>
In Chrome typeof(obj) === 'function' appears to be the fastest; however, in Firefox obj instanceof Function is performs relatively better. Related Concepts