`function go ()` vs `go = function ()` - PullRequest
2 голосов
/ 17 марта 2011

Я столкнулся с проблемой, которая кажется глупой с некоторым Javascript:

go = function () {
    alert("Go!");
}

$(function () {
    go();
});

При загрузке страницы появляется ошибка:

Сведения об ошибке веб-страницы

Пользовательский агент: Mozilla / 4.0 (совместимый; MSIE 8.0; Windows NT 6.1; WOW64; Trident / 4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Медиа Центр ПК 6.0; .NET4.0C; .NET4.0E; .NAP 1.1) Метка времени: четверг, 17 марта 2011 г. 20:18:03 UTC

Сообщение: объект не поддерживает это свойство или метод Строка: 1 символ: 1 Код: 0 URI: http://localhost:61710/Scripts/number.js

Когда я меняю инициализатор go на этот:

function go() {
    alert("Go!");
}

... все работает просто отлично.

Что мне не хватает? Кроме того, есть ли причина использовать одну форму инициализатора функции над другой?

Edit: Я получаю эту ошибку, когда запускаю код в экземпляре IE8, используя встроенный веб-сервер Visual Studio ( Запуск без отладки ). Когда я запускаю код в отдельном экземпляре IE8 без Visual Studio, он работает просто отлично. Возможно, Visual Studio заставляет IE использовать более строгие настройки компилятора JS?

Ответы [ 3 ]

8 голосов
/ 17 марта 2011

Сначала необходимо объявить переменную:

var go = function () {
    alert("Go!");
}

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

3 голосов
/ 17 марта 2011

Разница (и может помочь вам решить, что лучше других) заключается в том, что

go = function () {
    alert("Go!");
}

определяется во время анализа, тогда как

function go() {
    alert("Go!");
}

определяется во время выполнения.

PS, это работает для меня, однако вам может потребоваться:

var go = ... 

вместо

go = ...
1 голос
/ 17 марта 2011

отлично работает для меня:

http://jsfiddle.net/vEKgX/

хотя попробуйте это вместо:

var go = function () {
    alert("Go!");
}

$(go);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...