jQuery: основы - проблема с переменной областью - PullRequest
1 голос
/ 21 октября 2010

Я искал около часа или около того, пытаясь найти все, что мог о переменной области видимости в jscript / jquery, и, судя по всему, мой код должен работать.Прямо сейчас я просто хочу иметь возможность читать глобальную переменную из функции.Мой код не работает и сейчас он очень простой.В конце концов мне нужно будет манипулировать глобальной переменной, но один шаг за раз здесь:

var fooBar;
fooBar = "blah";

$('.var').click(function (fooBar) {
    alert(fooBar);
});

HTML:

<span class="var">(Button Test)</span>

Возвращает [Объект объекта]в окне предупреждения.Я действительно надеялся, что это вернет мне Бла.Я знаю, что это очень очень простой вопрос, но все примеры, которые я нахожу, довольно сложны, и мне довольно сложно свести его к самой базовой части, которая мне нужна.Любая помощь с благодарностью.

Ответы [ 4 ]

5 голосов
/ 21 октября 2010

Вам необходимо удалить его как параметр, например:

var fooBar;
fooBar = "blah";

$('.var').click(function () {
    alert(fooBar);
});

Причина, по которой вы видите [Object object], заключается в том, что первый параметр, переданный функции (и любому другому обработчику событий в jQuery), является jQuery event object , и этот параметр, названный так же, означает что внутри вашей функции fooBar относится к ней, потому что она более локальная. Ваша переменная доступна внутри, она просто переопределяется более локальной версией в настоящее время из-за того, что используется то же имя ... удалите его, как у меня выше, и все будет готово.

2 голосов
/ 21 октября 2010

Удалите fooBar из функции, так как она создает локальную переменную области видимости, которая будет использоваться вместо вашей глобальной.

$('.var').click(function () {
    alert(fooBar);
});
1 голос
/ 21 октября 2010

Глобальные переменные в Javascript на самом деле являются членами window, если у вас есть конфликт областей действия с локальной переменной, такой как ваш параметр fooBar, тогда вы можете полностью квалифицировать свою глобальную переменную fooBar следующим образом:

var fooBar;
fooBar = "blah";

$('.var').click(function (fooBar) {
    alert(window.fooBar);
});

На самом деле, я считаю необходимым всегда полностью квалифицировать глобальные переменные с помощью window, чтобы избежать путаницы или конфликтов.Действительно, я бы написал все это так:

window.fooBar = "blah";

$('.var').click(function (fooBar) {
    alert(window.fooBar);
});
0 голосов
/ 21 октября 2010

Вам не нужно fooBar в параметрах для вашей функции. Этого будет достаточно:

var fooBar;
fooBar = "blah";

$('.var').click(function() {
    alert(fooBar);
});

У вас слишком много кода, вот и все:)

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