如何在 JavaScript 中声明全局变量

IT技术 javascript global-variables
2021-01-21 18:33:17

如何在 JavaScript 中声明全局变量?

6个回答

如果您必须在生产代码中生成全局变量(应该避免),请始终明确声明它们

window.globalVar = "This is global!";

虽然可以通过省略var(假设没有同名的局部变量)来定义全局变量,但这样做会生成一个隐式全局变量,这是一件坏事,并且会在严格模式下产生错误

window仅在浏览器中可用。您能否编辑您的答案以使其在所有环境中都能正常工作?请参阅如何在 JavaScript 中获取全局对象?
2021-03-15 18:33:17

如果这是您要使用此变量的唯一应用程序,那么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(...) {...}每当我需要全局保存某些东西时,我仍然将它保留在全局命名空间之外。

这非常有效!只需确保如@Tomas 所说,为您自己的自定义函数或变量创建您自己的类/持有者。+1
2021-03-18 18:33:17
谢谢托马斯!如果不再需要,请删除父对象(例如:) delete $.miniMenu可以吗?
2021-04-07 18:33:17
感谢 Tomas,在我上面提到的网站中,Felix 方法工作正常,但我还有另一个网站,我也在使用几个插件,如果我可以让它工作,你的方法将是理想的。为你的帮助干杯。
2021-04-09 18:33:17
@KunJ:当然,就像任何事情一样:如果您可以保证不再使用它,那么删除它是安全的。然而,JavaScript的垃圾收集起来给你,所以你不要delete $.miniMenu
2021-04-12 18:33:17

注意:问题是关于 JavaScript 的,这个答案是关于 jQuery 的,这是错误的。这是一个古老的答案,从 jQuery 流行的时代开始。

相反,我建议理解JavaScript 中的作用域闭包

旧的,糟糕的答案

使用 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();
});

提示:在此页面的控制台中运行整个代码;-)

你可能是对的,但值得注意的是,使用 $myVar 语法你会得到 2 个好处,1) 变量是全局的,没有任何特殊声明(除了 $);和 2) 你可以很容易地在代码中跟踪你的全局变量。虽然开放讨论...
2021-03-15 18:33:17
$gallery 和 $current 不就是普通的全局变量吗?它们之所以起作用,是因为您通过省略“var”将它们定义为全局变量,但是它们前面的美元符号不会使它们成为“jQuery 变量”……字面意思是在它们上面加上下划线或任何其他符号... 如果您使用 jQuery 对象 ($) 并为其添加属性,则它们将是 jQuery 变量: $.myGlobalVariable = 'my value'...
2021-04-12 18:33:17
一个误导的答案。同意 Andres 的观点,这根本不是 jQuery 变量。如果$current = 0;在函数的开头没有定义,后面的就不行了。
2021-04-12 18:33:17

这是您的其余函数可以访问的全局变量的基本示例。这里是一个活生生的例子: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() 函数中。

我知道我在挖坟,但这甚至不是一个明确的全局变量。这更符合共享公共变量的范围,该变量没有限制在极小脚本的闭包中。它们是两种完全不同的方法/用法,如果您在位于多个不同脚本中间的脚本中声明显式全局变量,则此方法/用法会给您带来重大麻烦。我只能想象我团队的前端在脚本顶部声明了一个全局变量,这是第 10 个被调用到 DOM 的。
2021-03-18 18:33:17
关于全局变量如何在 jQuery 中工作的最佳答案。
2021-04-03 18:33:17

在函数外声明变量

function dosomething(){
  var i = 0; // Can only be used inside function
}

var i = '';
function dosomething(){
  i = 0; // Can be used inside and outside the function
}