2012-02-08 3 views
4

я в настоящее время кодирования таким образом:Как сохранить мои переменные javascript?

<script type="text/javascript"> 
var linkObj; 

Это безопасный способ хранения данных? Я беспокоюсь, что если jQuery или другой плагин должен также использовать переменную linkObj. Также, если я объявляю свою переменную как это, тогда ее также можно увидеть другими функциями в скриптах, расположенных в других js-файлах, которые я включаю?

ответ

5
$(document).ready(function(){ 
    var linkObj; 

}); 

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

5

Я объявляю переменную таким образом, что она будет доступна для всех скриптов, запущенных на странице.

Если вы просто хотите использовать его локально, обернуть его в функции:

(function() {var linkObj; ... })() 

Однако этот путь ничего вне этой функции будет иметь возможность доступа к нему.

Если вы хотите явно разделяют некоторые переменные между различными сценариями, вы можете также использовать объект в качестве пространства имен:

var myProject = {} 
myProject.linkObj = ... 

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

+0

Если я так делаю, тогда все в порядке, если более одного сценария объявляет var myProject = {}? Я спрашиваю об этом, потому что я не уверен, где объявить пространство имен vmyProject, которое будет распространено. Благодарю. –

+0

Нет, более одного скрипта все равно могут объявить 'myProject' и испортить ваши привязки. Однако, если вы дадите ему достаточно уникальное имя (например, название вашего проекта), у вас не должно быть никаких проблем. Если вы действительно параноик, вы можете проверить, принято ли имя перед его назначением. –

+0

Прости, что я не был чист. То, что я имел в виду, было более чем одним из моих собственных сценариев. Если два сценария использовали одно и то же пространство имен, но я не уверен, какой из сценариев будет работать, это будет хорошо? –

3

Заверните его в затворе:

<script type="text/javascript"> 
(function() { 
    var linkObj; 
    // Rest of your code 
})(); 
</script> 

Таким образом, ни один скрипт снаружи самостоятельно не будет иметь доступ к linkObj.

1

Это безопасный способ хранения данных?

Это не хранение данных как таковых, а только объявление переменной в блоке сценария в том, что я предполагаю, является HTML-страницей. Когда вы перезагрузите страницу в будущем, она не сохранит предыдущие значения.

Мое беспокойство заключается в том, что если jQuery или другой плагин должен также использовать переменную linkObj.

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

Также, если я объявляю свою переменную как это, тогда ее также можно увидеть другими функциями в скриптах, расположенных в других js-файлах, которые я включаю?

Да. Пока их выполнение запускается после загрузки блока сценария. Обычно это следует за порядком, в котором на странице появляется объявление сценария. Или независимо от порядка, который они отображаются на странице, если они выполняются, например, после события jQuery DOM «ready».

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

(function() { 
    var a = 1; // the scope is within the function 

    alert('The variable a is equal to: ' + a); 

})(); // the parenthesis invoke the function immediately 
Смежные вопросы