无法访问全局变量(Javascript)

Posted

技术标签:

【中文标题】无法访问全局变量(Javascript)【英文标题】:Can't access global variables (Javascript) 【发布时间】:2014-01-17 01:59:34 【问题描述】:
var hours = document.getElementById("hrs").value; // Global variables declared
var mins = document.getElementById("min").value; 
var seconds = document.getElementById("sec").value; 

function random()

    alert(hours);
    alert(mins);
    alert(seconds);

在所有 3 种情况下,输出结果为 undefined

【问题讨论】:

您是否尝试在函数 random 之外提醒(小时)?如果是,结果如何? 我们可以使用 this.mins 还是 this.hours?因为我在backbone.js中这样使用我不知道我们是否也可以在javascript中这样使用?请检查 看来一切正常!您能否确保正确设置了hrsminsec html 元素?应该是这样的<input type='text' id='hrs' /> HTML 部分我检查了好几次,看起来都很好。 【参考方案1】:

此特定代码可能位于 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 不得不说的,when onload is triggered

加载事件在文档加载过程结束时触发。在 此时,文档中的所有对象都在 DOM 中,并且所有 图像和子帧已完成加载。

因此,如果您从 HTML 元素中获取值,您可能需要确保我们仅在 HTML 文档加载完成后才从它们中获取值。

注意2:除此之外,您可能需要检查您是否真的正确设置了hrsminsec 的HTML 元素的idname and id attributes are actually used for different purposes.

【讨论】:

谢谢!!我能够修复它,你正在写关于那个 onload 事件。【参考方案2】:

我最近在服务器端脚本上遇到了类似的问题。

这是因为我在函数内部使用 var 重新声明了变量。摆脱 var 解决了这个问题。

【讨论】:

我的问题就是这种情况。谢谢。【参考方案3】:

试试这个链接,它可能会有所帮助:

你知道如果以下作为 JavaScript 程序执行,会提示什么值吗?

var foo = 1;
function bar() 
    if (!foo) 
        var foo = 10;
    
    alert(foo);

bar();

如果你对答案是“10”感到惊讶,那么这个答案可能真的会让你陷入困境:

var a = 1;
function b() 
    a = 10;
    return;
    function a() 

b();
alert(a);

http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html

【讨论】:

【参考方案4】:

很容易实现您的示例,如下所示:

var hours = document.getElementById("hrs").value; // Global variables declared
var mins = document.getElementById("min").value; 
var seconds = document.getElementById("sec").value; 

function random()

    alert(hours + mins + seconds);
<input type="text" id="hrs" value="9" />
<input type="text" id="min" value=":30" /> 
<input type="text" id="sec" value=":25" />

<input type="button" id="submit" value="GetDetails" onclick="random();">

【讨论】:

以上是关于无法访问全局变量(Javascript)的主要内容,如果未能解决你的问题,请参考以下文章

Selenium Web 驱动程序可以访问 javascript 全局变量吗?

在 JavaScript 函数中访问全局变量

不引用全局打字稿就无法直接访问全局变量

python多处理子进程无法访问全局变量

在 typescript/javascript 的 google.maps.Geocoder().geocode() 上使用全局变量

如何在javascript中访问当前范围之外的变量?