无法访问全局变量(Javascript)
JavaScript中访问全局变量失败的原因是变量提升的影响。当在函数中声明一个变量时,JavaScript会将其声明提升到函数的顶部,而不是保留在原来的位置。这意味着在函数内部的任何地方都可以访问这个变量,即使在声明之前。
解决这个问题的方法是避免在函数内部重新声明全局变量。可以通过删除var关键字来解决这个问题,这样变量就不会被提升,而是引用全局变量。
以下是修改后的代码示例:
var foo = 1; function bar() { if (!foo) { foo = 10; } alert(foo); } bar();
另一个解决方法是避免使用相同的变量名作为函数内部的函数声明。这种情况下,函数声明会覆盖全局变量。可以通过将内部函数命名为不同的变量来解决这个问题。
以下是修改后的代码示例:
var a = 1; function b() { var innerA = 10; a = innerA; return; function innerA() {} } b(); alert(a);
更多关于JavaScript作用域和变量提升的信息,可以参考http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html。
在HTML文件的
部分,这段代码可能会在特定HTML元素创建之前执行。因此,这些值被赋予了undefined的值。因此,您可能希望将值赋值部分移动到函数内部本身。
var hours, mins, seconds;
function random()
{
hours = document.getElementById("hrs").value;
mins = document.getElementById("min").value;
seconds = document.getElementById("sec").value;
alert(hours);
alert(mins);
alert(seconds);
}
注意1:通常情况下,如果您不使用像jQuery这样的库,像这样的代码会放在onload事件中。MDN对此有以下说明:
当onload事件触发时,文档加载过程结束。此时,文档中的所有对象都在DOM中,所有的图像和子框架都已完成加载。
因此,如果您要从HTML元素中获取值,您可能希望确保只有在HTML文档加载完成后才从中获取值。
注意2:除此之外,您可能还要检查是否正确设置了HTML元素的id属性,如“hrs”,“min”和“sec”。name和id属性实际上用于不同的目的。
感谢!我已经解决了问题,您对于onload事件的解释是正确的。