gpt4 book ai didi

javascript - 将全局变量声明和定义为函数结果有时有效吗?

转载 作者:行者123 更新时间:2023-11-28 18:55:45 26 4
gpt4 key购买 nike

我使用过的一些编程语言对于将全局变量设置为函数的结果非常挑剔,因此我习惯在 main() 或 init() 中执行此操作。

这是由一位 friend 发送给我的,令我惊讶的是,它在我的计算机和她的本地计算机上运行完全正常,但在我们的任何服务器上都无法运行:

function getValue(val) {
return document.getElementById(val);
}
var myValue = getValue("output"); // is this kosher?
function init() {
myValue.innerHTML = "foo"; //error: myValue is null
//document.getElementById("output").innerHTML="bar"; //this works though
}
window.onload = init

但是,奇怪的是,这在服务器和本地都有效:

function getValue(val) {
return val;
}
var myValue = getValue("output");
function init() {
alert(myValue);
}
window.onload = init;

我通过这样做修复了它:

function getValue(val) {
return document.getElementById(val);
}
var myValue; // don't set the value here
function init() {
myValue = getValue("output"); // but here instead
myValue.innerHTML = "foo"; // this is fine
}
window.onload = init

...但现在我很困惑为什么第二个代码块可以工作,而第一个代码块不能。这是否与 HTML 文档在服务器上加载之前运行声明的 JS 有关?

仅供引用,文档如下:

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<script src="test.js"></script>
</head>
<body>
<div id="output">
</div>
</body>
</html>

最佳答案

在第一个 block 中,您尝试在 dom(html 本身)完全渲染和初始化之前获取一个元素。这就是第三个 block 起作用的原因,因为您可以在 window.load 上获取它,该事件在 html 初始化之后运行。

第二个 block 有效,因为它只是一个字符串,所以没问题。

这里您的“输出”元素尚不存在。因此 myValue 将被设置为 null:

var myValue = getValue("output"); 

这就是为什么它在 window.load 中为 null 的原因。

关于javascript - 将全局变量声明和定义为函数结果有时有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33657614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com