我目前正以这种方式编码:
<script type="text/javascript">
var linkObj;
这是一种存储数据的安全方式吗?我担心的是,如果jQuery或其他插件也使用变量linkObj。此外,如果我声明我的变量,那么它还可以被我包含的其他js文件中的脚本中的其他函数看到吗?
答案 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