gpt4 book ai didi

javascript - 声明的函数被 IE 11 视为未定义

转载 作者:行者123 更新时间:2023-12-02 21:58:17 25 4
gpt4 key购买 nike

我在 IE 中的函数声明方面遇到一些问题。即使我将函数直接链接到窗口对象,它也会出现。我尝试用文档而不是窗口进行切换,但没有成功。

这是我尝试使用的基本代码:

window.addEventListener('load', function () {
function initChart (id) {...}


//linking to window object
window.initChart = initChart;


});

正如我所说,我什至尝试直接链接它:window.initchart(id){...} 。更重要的是,我什至包含了我在 body 中声明函数的 js 文件(因为有传言说 IE 看​​不到 head 部分中声明的函数)

之后,在脚本标签内我调用 initChart()使用有效的 ID,我在 IE 控制台中收到此错误: 'initChart' is undefined .

<script>
initChart('chart');
</script>

奇怪的是,在Chrome、Firefox和Opera中却没有这样的问题。有什么想法吗?

PS:如果这是重复的,我没有找到涵盖此问题的问题。

最佳答案

您还需要执行initChart('chart');窗口加载事件处理程序内部(此一个或稍后添加的一个)。或者您可以在另一个事件处理程序中执行此操作,您确信该事件处理程序在此窗口加载事件处理程序之后发生。

当您的代码由浏览器处理时,它知道在窗口加载事件上执行某些操作,即设置您的 window.initChart .

但是稍后您会立即使用它,而不会发生窗口加载事件。

如果 Chrome 中没有发生这种情况,我想知道是否所有内容都已加载,但即便如此,我认为您的 window.initChart在下一个事件周期中设置。 (让我尝试做一些实验——您不是在调试器中执行这些操作,而是在 HTML 文件中执行这些操作?)。但在 Chrome 中确实不应该这样,因为加载事件处理程序不会在您的 <script> 之前发生。标记被解析并执行,这会initChart('chart');已经。

但无论如何,最好遵循事件顺序:如果您设置 window.initChart在窗口加载事件处理程序上,也只调用 window.initChart()在同一个和后来添加的事件处理程序中,或者在之后发生的事件处理程序中。

您可以在下面看到HERE 02发生在HERE 01之前:

window.addEventListener('load', function() {
console.log("HERE 01");
});

console.log("HERE 02");

我在 Chrome 中运行以下命令,但确实收到了预期的错误:

window.addEventListener('load', function() {
function foo() {
console.log("HERE 01");
}
window.foo = foo;
});

foo();

但是这个按预期工作了:

window.addEventListener('load', function() {
function foo() {
console.log("HERE 01");
}
window.foo = foo;
});

window.addEventListener('load', function() {
foo();
});

关于javascript - 声明的函数被 IE 11 视为未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59948303/

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