无法访问全局变量(Javascript)

8 浏览
0 Comments

无法访问全局变量(Javascript)

全局变量声明\n变量hours赋值为获取id为\"hrs\"的元素的值\n变量mins赋值为获取id为\"min\"的元素的值\n变量seconds赋值为获取id为\"sec\"的元素的值\n函数random()\n{\n 弹出显示变量hours的值\n 弹出显示变量mins的值\n 弹出显示变量seconds的值\n}\n在这3种情况下,输出结果均为undefined。

0
0 Comments

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

0
0 Comments

在一个服务器端脚本中,我最近遇到了类似的问题。这是因为我在函数内部使用var重新声明了变量。去掉var修复了这个问题。我的问题也是如此。谢谢。

原因:在函数内部使用var重新声明了变量。

解决方法:去掉var修复这个问题。

0
0 Comments

在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事件的解释是正确的。

0