2012-02-08 34 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命名空间。谢谢。 – 2012-02-08 05:24:23

+0

不,一个以上的脚本仍然可以声明'myProject'并搞乱你的绑定。但是,如果给它一个足够独特的名称(例如项目名称),则不应该有任何问题。如果你真的偏执,可以在分配名称之前检查名字是否被采用。 – 2012-02-08 05:25:40

+0

对不起,我不清楚。我的意思是我自己的脚本不止一个。如果两个脚本都使用相同的命名空间,但我不确定哪个脚本运行会好吗? – 2012-02-08 05:30:47

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 
相关问题