为什么 java 脚本解析未传递给函数并在该函数下方声明的变量

Why does java script resolves variable which is not passed to the function and is declared below this function

在第 10 行到 clearTimeout() 函数传递了 timer 变量,该变量在 moveBox 函数外部被清除,并在第 20 行在它下面。为什么 java脚本将 timer 解析为变量?为什么它确实看到了?

JavaScript 中的变量声明在该范围内的任何分步代码之前处理,并且在其他函数(和全局范围)内声明的函数可以访问在其包含范围内声明的变量。

所以变量存在是因为声明是预先处理的,并且函数可以访问它,因为这就是作用域在 JavaScript.

中的工作方式

所以您的代码中发生的事情按以下顺序发生:

  1. 变量speedmoveBoxtimer均声明并赋初值undefined.

  2. 开始逐步执​​行代码

  3. speed 被赋值为 10

  4. moveBox =右边的函数表达式被求值,结果函数引用赋给moveBox.

  5. 传递给 setInterval 的函数表达式被求值,然后用它调用 setIntervalspeed.

    的值
  6. setInterval的return值赋值给timer

  7. (一段时间后)第一次调用 moveBox 发生