Answers:
如果这是您唯一要使用此变量的应用程序,则Felix的方法很好。但是,如果您正在编写jQuery插件,请考虑jQuery对象下所需的“名称空间”(稍后在引号中进行详细说明...)变量和函数。例如,我目前正在使用一个名为miniMenu的jQuery弹出菜单。因此,我miniMenu
在jQuery下定义了一个“命名空间” ,并将所有内容放置在其中。
我在谈论javascript名称空间时使用引号的原因是,从正常意义上说,它们并不是真正的名称空间。相反,我只是使用一个javascript对象并将所有函数和变量作为该对象的属性。
另外,为方便起见,我通常用 i
仅用于内部内部使用的东西名称空间,以便对插件用户隐藏。
它是这样工作的:
// An object to define utility functions and global variables on:
$.miniMenu = new Object();
// An object to define internal stuff for the plugin:
$.miniMenu.i = new Object();
现在,我可以做$.miniMenu.i.globalVar = 3
或$.miniMenu.i.parseSomeStuff = function(...) {...}
每当我需要在全球范围内保存的东西,我仍然保持它的全局命名空间。
delete $.miniMenu
。可以吗
delete $.miniMenu
。
编辑 问题是关于JavaScript,答案是关于jQuery,这是错误的。从jQuery普及以来,这是一个古老的答案。
旧的错误答案: 使用jQuery,无论声明在哪里,都可以执行以下操作:
$my_global_var = 'my value';
并将随处可见。当图像散布在不同的地方时,我用它来制作快速的图像库,如下所示:
$gallery = $('img');
$current = 0;
$gallery.each(function(i,v){
// preload images
(new Image()).src = v;
});
$('div').eq(0).append('<a style="display:inline-block" class="prev">prev</a> <div id="gallery"></div> <a style="display:inline-block" class="next">next</a>');
$('.next').click(function(){
$current = ( $current == $gallery.length - 1 ) ? 0 : $current + 1;
$('#gallery').hide().html($gallery[$current]).fadeIn();
});
$('.prev').click(function(){
$current = ( $current == 0 ) ? $gallery.length - 1 : $current - 1;
$('#gallery').hide().html($gallery[$current]).fadeIn();
});
提示:在此页面的控制台中运行整个代码;-)
$current = 0;
在函数的开头定义,则后面的函数将不起作用。
这是其余函数可以访问的全局变量的基本示例。这是一个为您提供的实时示例:http : //jsfiddle.net/fxCE9/
var myVariable = 'Hello';
alert('value: ' + myVariable);
myFunction1();
alert('value: ' + myVariable);
myFunction2();
alert('value: ' + myVariable);
function myFunction1() {
myVariable = 'Hello 1';
}
function myFunction2() {
myVariable = 'Hello 2';
}
如果要在jquery ready()函数中执行此操作,请确保变量与其他函数一起位于ready()函数内。
最好的方法是使用closures
,因为window
对象的属性变得非常混乱。
HTML
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="init.js"></script>
<script type="text/javascript">
MYLIBRARY.init(["firstValue", 2, "thirdValue"]);
</script>
<script src="script.js"></script>
</head>
<body>
<h1>Hello !</h1>
</body>
</html>
init.js(基于此答案)
var MYLIBRARY = MYLIBRARY || (function(){
var _args = {}; // private
return {
init : function(Args) {
_args = Args;
// some other initialising
},
helloWorld : function(i) {
return _args[i];
}
};
}());
script.js
// Here you can use the values defined in the html as if it were a global variable
var a = "Hello World " + MYLIBRARY.helloWorld(2);
alert(a);
这是plnkr。希望对您有所帮助!
window
仅在浏览器中可用。您可以编辑答案以使其在所有环境中都有效吗?请参阅如何在JavaScript中获取全局对象?