Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

var functionName = function() {} vs function functionName() {}

I've recently started maintaining someone else's JavaScript code. I'm fixing bugs, adding features and also trying to tidy up the code and make it more consistent.

The previous developer used two ways of declaring functions and I can't work out if there is a reason behind it or not.

The two ways are:

var functionOne = function() {     // Some code }; 
function functionTwo() {     // Some code } 

What are the reasons for using these two different methods and what are the pros and cons of each? Is there anything that can be done with one method that can't be done with the other?

like image 977
Richard Garside Avatar asked Dec 03 '08 11:12

Richard Garside


People also ask

What is the difference between VAR and function in JavaScript?

A variable is something, which stores data. A function is a bunch of code, which can be executed, if you call. But a function can be a variable, too, as it stores data and values, too. See the following syntax: var functionname = function(){} .

What is the difference between function declaration and function expression?

The main difference between a function expression and a function declaration is the function name, which can be omitted in function expressions to create anonymous functions. A function expression can be used as an IIFE (Immediately Invoked Function Expression) which runs as soon as it is defined.

What is function () JavaScript?

A function in JavaScript is similar to a procedure—a set of statements that performs a task or calculates a value, but for a procedure to qualify as a function, it should take some input and return an output where there is some obvious relationship between the input and the output.


1 Answers

The difference is that functionOne is a function expression and so only defined when that line is reached, whereas functionTwo is a function declaration and is defined as soon as its surrounding function or script is executed (due to hoisting).

For example, a function expression:

// TypeError: functionOne is not a function  functionOne();    var functionOne = function() {    console.log("Hello!");  };

And, a function declaration:

// Outputs: "Hello!"  functionTwo();    function functionTwo() {    console.log("Hello!");  }

Historically, function declarations defined within blocks were handled inconsistently between browsers. Strict mode (introduced in ES5) resolved this by scoping function declarations to their enclosing block.

'use strict';      { // note this block!    function functionThree() {      console.log("Hello!");    }  }  functionThree(); // ReferenceError
like image 87
Greg Avatar answered Oct 15 '22 06:10

Greg