我应该如何存储我的javascript变量?

时间:2012-02-08 05:04:46

标签: javascript jquery

我目前正以这种方式编码:

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

这是一种存储数据的安全方式吗?我担心的是,如果jQuery或其他插件也使用变量linkObj。此外,如果我声明我的变量,那么它还可以被我包含的其他js文件中的脚本中的其他函数看到吗?

4 个答案:

答案 0 :(得分:5)

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

});

只要您使用var关键字,其他插件就无法访问该范围中定义的任何变量。

答案 1 :(得分:5)

我以这种方式声明变量,它可以被页面上运行的所有脚本访问。

如果您只想在本地使用它,请将其包装在一个函数中:

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

但是,这种方式 在函数外部将能够访问它。

如果要在不同脚本之间显式共享某些变量,还可以使用对象作为命名空间:

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

这将最大限度地减少您必须依赖的全局名称数量。

答案 2 :(得分:3)

将其包裹在封口中:

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

这样,您自己以外的任何脚本都无法访问linkObj。

答案 3 :(得分: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