Подтвердить что ты не робот

Разница между назначением функции переменной или нет

У меня есть несколько разных проектов, и я видел два разных способа создания jquery/javascript-функций.

Первое:

function testFunction(){

};

Второе:

var testFunction = function (){

};

Есть ли разница между ними?

4b9b3361

Ответ 1

Основное отличие заключается в том, что первый (объявление функции) поднимается в верхнюю часть области, в которой он объявлен, тогда как второй (выражение функции) не является.

Именно по этой причине вы можете вызвать функцию, которая была объявлена ​​после ее вызова:

testFunction();
function testFunction() {}

Вы не можете сделать это с помощью выражения функции, так как назначение происходит на месте:

testFunction();
var testFunction = function() {}; //TypeError

Существует также третья форма (именованное функциональное выражение):

var testFunction = function myFunc() {};

В этом случае идентификатор myFunc находится только в области видимости внутри функции, тогда как testFunction доступен в той области, в которой он объявлен. НО (и всегда есть, но когда дело доходит до Internet Explorer) в IE ниже версии 9 идентификатор myFunc ошибочно просачивается в область содержимого. Именованные функциональные выражения полезны, когда вам нужно обратиться к вызывающей функции (поскольку arguments.callee устарел).


Также обратите внимание, что то же самое верно для объявлений переменных:

console.log(x); //undefined (not TypeError)
var x = 10;

Вы можете себе представить, что движок JavaScript интерпретирует такой код:

var x; //Declaration is hoisted to top of scope, value is `undefined`
console.log(x);
x = 10; //Assignment happens where you expect it to