在JavaScript中使用全局变量

在JavaScript中使用全局变量,javascript,variables,global-variables,Javascript,Variables,Global Variables,我该怎么做 我的代码是这样的: var number = null; function playSong(artist, title, song, id) { alert('old number was: ' + [number] + ''); var number = '10'; alert('' + [number] + ''); } 第一个警报总是返回“旧号码是:”,而不是10。在第二次函数调用时,它不应该在两个警报上都返回10吗?删除函数中number前面

我该怎么做

我的代码是这样的:

var number = null;

function playSong(artist, title, song, id)
{
    alert('old number was: ' + [number] + '');

    var number = '10';

    alert('' + [number] + '');
}

第一个警报总是返回“旧号码是:”,而不是10。在第二次函数调用时,它不应该在两个警报上都返回10吗?

删除函数中
number
前面的
var
。您正在通过以下方式创建局部变量:

var number = 10;
你只需要

number = 10;

通过在设置number='10'时使用
var
,每次都将
number
声明为局部变量。试试这个:

var number = null;

function playSong(artist, title, song, id)
{
    alert('old number was: ' + [number] + '');

    number = '10';

    alert('' + [number] + '');
}

问题是您在函数内部声明了一个名为
number
的新变量。此新变量隐藏全局
number
变量,因此行
number=10
仅分配给此新局部变量


您需要从
var number=10
中删除
var
关键字,就像在C中一样,您需要在函数/方法之外定义变量以使其成为全局变量

var number = 0;

function playSong(artist,title,song,id)
{
    alert('old number was: '+[number]+'');
    number = '10';
    alert(''+[number]+'');
}

在删除函数中的
var
之后,您也可以在任何函数(如
window.number
)中访问它。

让我详细解释一下。在JavaScript中声明全局变量和局部变量

var firstNumber = 5; // Local variable
secondNumber = 10; // Global variable or window object
当你的程序是这样的时候

var number = 1;
function playSong() {
    alert(number);
    var number = 2;
    alert(number);
}
根据JavaScript编译器,变量的所有声明/初始化都将移到顶部。这个概念叫做

根据编译器,程序的执行方式如下:

var number; // Declaration will move to top always in Javascript
number = 1;
function playSong() {
    var number;
    alert(number); // Output: undefined - This is a local variable inside the function
    number = 2;
    alert(number); // Output: 2
}
如果需要访问函数中的全局变量,请使用window.number


我在2020年遇到了这个答案,在网上搜索了更多的内容后,我发现,显然在JavaScript定义中,如果您将变量放在函数之外,甚至创建一个名为globals.js的文件,并将所有全局必需的变量放在该文件中,在jQuery和任何其他您需要的插件之后,将该文件作为脚本标记中的第一个user.js文件,globals将在其他脚本之前加载,并允许您在页面上的任何脚本中从globals.js调用变量


我已经在我正在构建的应用程序中测试了这一理论,并且我能够在一个页面中调用globals.js文件中的变量,该页面通过jconfirm对话框加载到故障诊断向导,以设置对话框关闭时的返回值。

在同一个页面中发布相同的答案让人放心事实上,任何没有“var”的定义都将是一个全局变量,不管它是在哪里定义的。Javascript可能很吓人,该死的!谢谢你这么快就给出了答案。你为什么要写警报('旧号码是:'+[number]+'');且不警报('旧编号为:'+编号);因为它会提醒一个数组中有一个项目,而不是项目(编号)Hmmm dunno,但它可以工作。我不认为它会寻找任何数组,因为我在右边加上了空的空格;或者我不知道。你如何访问函数playSong外的变量并获得值10?@johnsnails变量在函数外声明,因此当赋值数=10时,实际上是引用全局变量,但如果我们在边函数中使用var number='10',则它将具有局部作用域,我们不会在函数外得到值10。这可能是真的,但也许可以说一些关于上下文的内容(例如,它在Node.js中是否工作?)。
var number = 1;
function playSong() {
   var number = 2;
   alert(window.number); // Output: 1   - From a global variable
   alert(number); // Output: 2   - From local variable
}