2010-10-25 4 views
2

Я уверен, на этот вопрос уже был дан ответ, но я просто не мог его найти.Лучшая практика: переменная Javascript/Jquery для последующего использования

Если в рамках функции определена переменная, какова наилучшая практика ее сохранения для последующего использования? 1. Сохранять его «глобально»?
foo = 'bar';
...
function bar(){
...
foo = 'bat';
return foo;
}
...

Здесь переменная будет изменена позже. 2. Или сохранить его в поле скрытой формы в HTML-DOM?

`Thanxs!

+0

Зависит от того, как его использовать и почему. Если его использовать только в той же функции, вы можете сохранить его как свойство на панели имен функций ["foo"] = "", но если он будет использоваться в другом месте, может быть лучше объявить его там от начала , –

+0

Примечание: Я думаю, вы можете отредактировать его, чтобы сказать 'foo =" bar "; function bar() {... foo = "bat"; return foo; } '. По крайней мере, так я прочитал этот вопрос. – BudgieInWA

+0

Это о exaple того, как я подумал: функцию с() { \t \t если (TypeOf с [ "1"] == "неопределенный") \t \t \t с [ "1"] = 1; \t \t документ.написать (с [ "1"] ++); \t} \t \t c(); Он работает как статическая переменная. –

ответ

2

Сохранение его как глобальной переменной JavaScript на сегодняшний день является наиболее эффективным.

EDIT: Если данные вы хотите сохранить связан с элементом на странице (например, каждая строка в таблице имеет немного данных, связанных с ним), и вы используете JQuery, есть a data() method, который более эффективен, чем установка атрибута элемента или чего-то подобного.

2

Это зависит от контекста, но возможно: в переменной, определенной на верхнем уровне замыкания, которая обертывает набор функций, к которым он применяется.

т.е.

var exports = function() { 
    var stored_data; 
    function set_data(foo) { 
     stored_data = foo; 
    } 
    function get_data() { 
     return stored_data; 
    } 
    return { get: get_data, set: set_data }; 
}(); 

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

1

Спецификация HTML5 определила решение этого вопроса: если вы используете HTML5, вы можете указать атрибуты данных в своей DOM.

Смотрите эту страницу для получения дополнительной информации: http://ejohn.org/blog/html-5-data-attributes/

Это теперь стандартизированный способ сделать это, так что я думаю, что это считается лучшей практики. Также Джон Ресиг, который написал блог, который я связал выше, является автором JQuery, поэтому, если он достаточно хорош для него, я должен спорить.

Действительно хорошая новость заключается в том, что вам даже не нужно использовать HTML5-совместимый браузер для работы этой техники - он уже работает в старых браузерах; это просто, что теперь он был закодирован в стандарт, и есть определенный способ сделать это.

Это говорит о том, что в вашей Javascript нет ничего плохого в глобальной переменной, если вы избегаете слишком много загрязнять пространство имен, и это будет более эффективно с точки зрения производительности, поэтому в этом подходе есть много достоинств.

+0

Привет, Спэдли, спасибо за ваш ответ. Я просто попробовал путь Ресига. Однако использование атрибутов типа «имя-данных» в настоящее время недействительно. Код (W3C) при использовании XHTML 1.0 Strict :-( – Mike

+0

@Mike: блог Джона Ресига вкратце обсуждает, как это сделать в XHTML (дополнительное пространство имен) и ссылки на другой блог который обсуждает его более подробно.Однако я бы предложил отказаться от XHTML в любом случае. XHTML имеет свой день: HTML5 - гораздо более мощная спецификация, и вы потеряете функциональность, если вы не сделаете прыжок рано или поздно (и на этом этапе это просто изменение вашего doctype, так что это легко сделать). – Spudley

Смежные вопросы