7

我该怎么做呢?

我的代码是这样的:

var number = null;

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

    var number = '10';

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

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

4

7 回答 7

15

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

var number = null;

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

    number = '10';

    alert('' + [number] + '');
}
于 2009-07-22T18:24:18.857 回答
11

删除函数var中的前面number。您正在创建一个局部变量

var number = 10;

您只需

number = 10;
于 2009-07-22T18:23:30.667 回答
3

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

您需要从 中删除var关键字var number = 10

于 2009-07-22T18:25:30.350 回答
2

就像在 C 中一样,您需要在函数/方法之外定义变量以使其成为全局变量。

var number = 0;

function playSong(artist,title,song,id)
{
    alert('old number was: '+[number]+'');
    number = '10';
    alert(''+[number]+'');
}
于 2009-07-22T18:26:50.940 回答
2

让我详细解释一下。在 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

var number = 1;
function playSong() {
   var number = 2;
   alert(window.number); // Output: 1   - From a global variable
   alert(number); // Output: 2   - From local variable
}
于 2018-02-12T06:42:41.783 回答
1

window.number在函数内部删除后,您还可以在任何函数中访问它,例如, var

于 2013-07-24T06:22:39.693 回答
0

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

W3C JavaScript 范围

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

于 2020-05-29T15:05:39.103 回答