我该怎么做?
我的代码是这样的:
var number = null;
function playSong(artist,title,song,id)
{
alert('old number was: '+[number]+'');
var number = '10';
alert(''+[number]+'');
}
第一个警报总是返回'旧号码是:'而不是10.在第二个函数调用时,它是否应该在两个警报上都返回10?
答案 0 :(得分:15)
在设置number ='10'时使用var
,您每次都将number
声明为局部变量。试试这个:
var number = null;
function playSong(artist,title,song,id)
{
alert('old number was: '+[number]+'');
number = '10';
alert(''+[number]+'');
}
答案 1 :(得分:11)
删除函数中数字前面的var。您正在通过
创建局部变量var number = 10;
你需要的只是
number = 10;
答案 2 :(得分:3)
问题是你在函数内部声明了一个名为number
的新变量。这个新变量隐藏了全局number
变量,因此行number = 10
仅分配给这个新的局部变量。
您需要从var
删除var number = 10
关键字。
答案 3 :(得分:1)
与C类似,您需要在函数/方法之外定义变量以使其成为全局变量。
var number = 0;
function playSong(artist,title,song,id)
{
alert('old number was: '+[number]+'');
number = '10';
alert(''+[number]+'');
}
答案 4 :(得分:1)
在删除var inside函数之后,你也可以在window.number之类的任何函数中访问它。
答案 5 :(得分:1)
让我详细解释一下,在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编译器,变量的所有声明/初始化将移至顶部,这个概念称为“提升”。 链接:https://www.w3schools.com/js/js_hoisting.asp
根据编译器程序将执行
var number; //Declaration will move to top always in Javascript
number=1;
function playSong() {
var number;
alert(number); //output : undefied - This is 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 Global variable
alert(number); // output : 2 -From local variable
}
答案 6 :(得分:0)
我在2020年遇到了这个问题,在网上搜索了更多内容之后,我发现在JavaScript定义中显然是将变量放在函数之外,甚至创建了一个名为 globals.js 的文件并将所有全局所需的变量放入该文件中,将该文件作为jQuery和您需要的任何其他插件之后的脚本标记中的第一个用户.js文件,全局变量将在其他脚本之前加载,并允许您从 globals.js 在页面上的任何脚本中。
我已经在自己构建的PHP应用程序中测试了该理论,并且已经能够通过通过{{加载的页面中的 globals.js 文件调用变量3}}到 jconfirm 对话框,以进行故障排除向导以设置关闭对话框时的返回值。