Разница между назначением функции переменной или нет
У меня есть несколько разных проектов, и я видел два разных способа создания jquery/javascript-функций.
Первое:
function testFunction(){
};
Второе:
var testFunction = function (){
};
Есть ли разница между ними?
Ответ 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