javascript - 为什么可以在脚本中声明和定义函数之前调用该函数?

标签 javascript function

以下是我的意思的一些示例代码,摘自 How to JS Animate (W3 Schools via W3schools.com) .

示例代码:

function myMove() 
    {
          var elem = document.getElementById("myAnimation");
          var pos = 0;
          var id = setInterval(frame, 10);
          function frame()
          {
            if (pos == 350) {
              clearInterval(id);
            } else {
              pos++;
              elem.style.top = pos + 'px';
              elem.style.left = pos + 'px';
            }
          }
    } 

在上面的具体示例代码的上下文中,为了具体起见,我将提出同样的问题。

问题:

Why can frame() be called by setInterval(frame,x) even though its first defined and declared after the assignment of setInterval() to the "id" variable deceleration?

背景:
我是一名自学成才的 C/C++ 程序员,正在尝试进入 Web 开发领域。我读过有关 ES6 变量“提升”的内容,但我不完全确定函数是否也会发生这种情况。在 C++ 和 C 中,你不能这样做(根据我的理解)!所以,请有人帮助我!

谢谢!

最佳答案

感谢Hoisting 。想象一下您的函数定义将被移动到脚本的顶部。就是这样,你可以调用frame(),尽管它的定义在下面

关于javascript - 为什么可以在脚本中声明和定义函数之前调用该函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58967365/

相关文章:

javascript - 如何在纯 JavaScript 中覆盖原生 JS 函数(canvas 的 drawImage() )?

javascript - Angular ngRoute 导致无限循环和堆栈溢出

javascript - 如何更改 Highstock 图表上的 UTC 时间戳?

C从函数传递双指针

python - 奇怪的语法错误(Python 新手)

javascript - 无法访问谷歌浏览器控制台中的变量

javascript - Angular 指令/子指令嵌入在 ng-repeat 中

javascript - 将文件名从文件上传传递到文本字段

javascript - 函数不断重复运行 Jquery

swift - 有没有办法在Swift中使用#selector调用带参数的函数