【问题标题】:Javascript function when called twice does not execute两次调用的Javascript函数不执行
【发布时间】:2022-01-24 02:36:28
【问题描述】:

我正在尝试了解关于“w3schools - 课程:JS 异步”的函数排序教程,但我被困在下面的示例中。

如果你有一个被调用两次的 JS 函数,显然函数被调用的顺序决定了哪个函数被执行,在下面的例子中,我希望第一个函数被执行,但它不是

这节课的精髓应该是,函数的声明不决定它的执行顺序,只决定它的调用方式,但我无法掌握..

谁能详细说明或解释这种语法的逻辑?或者 JS 的底层发生了什么?

教程链接:https://www.w3schools.com/js/js_callback.asp

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Function Sequence</h2>

<p>JavaScript functions are executed in the sequence they are called.</p>

<p id="demo"></p>

<script>
function myDisplayer(some) {
  document.getElementById("demo").innerHTML = some;
}

function myFirst() {
  myDisplayer("Hello");
}

function mySecond() {
  myDisplayer("Goodbye");
}

myFirst();
mySecond();
</script>

</body>
</html>

【问题讨论】:

  • 你没有调用任何函数两次。函数怎么没执行?似乎它在您的示例中有效。
  • 好的,伙计们,我添加了完整的代码。执行的函数是第二个函数“再见”即使第一个函数是被调用的,这就是我的意思。
  • mySecond 是最后调用的,所以“Goodbye”是最后的输出。您只是覆盖了myFirst 函数调用中的先前结果“Hello”。尝试将innerHTML = some 更改为innerHTML += some,您将看到两个结果的顺序正确。
  • 好的,谢谢 Carabus.. 我想我明白你的意思,它被最后调用并因此被执行。但是第一个函数根本没有执行,即使我也调用了它..我不明白这一点。当我同时调用它们时,不应该同时执行这两个函数吗?
  • @JhonattanRapprecht,第一个函数被执行,但它的结果立即被第二个函数调用覆盖。想想看:每次调用其中一个函数时,您实际上是在 替换 (.innerHTML = ...) #demo div 的全部内容。

标签: javascript function async.js


【解决方案1】:

您可以通过在myDisplayer 函数中包含console.log 语句来验证这两个函数的调用顺序是否正确。

因为每次调用函数时都会覆盖#demo 的全部内容,所以只能看到最后一次函数调用的结果。

function myDisplayer(some) {
  console.log(some);
  document.getElementById("demo").innerHTML = some;
}

function myFirst() {
  myDisplayer("Hello");
}

function mySecond() {
  myDisplayer("Goodbye");
}

myFirst();
mySecond();
&lt;p id="demo"&gt;&lt;/p&gt;

【讨论】:

  • 很好的答案显示了对 JS 的深刻洞察。非常感谢朋友。我忘了我可以用 console.log 函数检查函数是否被执行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
  • 2015-06-18
  • 2023-04-11
  • 1970-01-01
  • 2021-07-04
  • 2012-09-23
相关资源
最近更新 更多