, если переменная id_menu_bar
находится в глобальной области видимости, тогда она может использоваться другим скриптом на странице.
jQuery's $.data()
также подходит для хранения данных по элементам и означает, что вам не нужно использовать глобальную переменную и загрязнять глобальное пространство имен.
EDIT:
В ответ на ваш комментарий существует различие в том, как вы объявляете переменные, которые определяют их область видимости в JavaScript.
Глобальные переменные
За пределами функции, объявляющей переменную типа
var myVariable;
или
myVariable;
не будет иметь значения - обе переменные будут иметь глобальную область видимости. Фактически, второй подход даст переменную глобальную область видимости даже внутри функции. Например
function firstFunction() {
// Local scope i.e. scoped to firstFunction
var localVariable;
// Global scope i.e. available to all other JavaScript code running
// in the page
globalVariable = "I'm not really hiding";
}
function secondFunction() {
// I can access globalVariable here but only after
// firstFunction has been executed
alert(globalVariable); // alerts I'm not really hiding
}
Разница в этом сценарии заключается в том, что предупреждение не будет работать и не будет отображать значение для globalVariable
при выполнении secondFunction()
до тех пор, пока не будет выполнено firstFunction()
, поскольку именно здесь объявлена переменная. Если бы переменная была объявлена вне какой-либо функции, предупреждение было бы успешным и показало бы значение globalVariable
Использование jQuery.data ()
Используя эту команду, вы можете сохранить данные в объекте кэша для элемента. Я бы порекомендовал посмотреть на источник, чтобы увидеть, как это достигнуто, но это довольно аккуратно. Рассмотрим
function firstFunction() {
$.data(document,"myVariable","I'm not really hiding");
globalVariable = "I'm not hiding";
}
function secondFunction() {
// alerts "I'm not really hiding" but only if firstFunction is executed before
// secondFunction
alert($.data(document, "myVariable"));
// alerts "I'm not hiding" but only if firstFunction is executed before
// secondFunction
alert(globalVariable);
}
в этом сценарии строковое значение "I'm not really hiding"
сохраняется для объекта документа с использованием строки ключа myVariable
в firstFunction
. Это значение затем может быть получено из объекта кэша в любом месте скрипта. Попытка чтения значения из объекта кэша без предварительной установки приведет к undefined
.
Взгляните на это Рабочая демоверсия для получения более подробной информации.
По причинам, не позволяющим использовать глобальные переменные, ознакомьтесь с статьей .