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

Yod*_*oda 0 javascript scope

在第10行中,clearTimeout()函数有一个传递timer变量,moveBox它在函数外部被删除,在第20行下面.为什么java脚本会解析timer为变量?它为什么看到它?

在此输入图像描述

T.J*_*der 5

JavaScript中的变量声明在该作用域中的任何分步代码之前处理,而在其他函数(以及全局作用域)中声明的函数可以访问在其包含作用域中声明的变量.

所以变量存在是因为事先处理了声明,并且函数可以访问它,因为这是范围在JavaScript中的工作方式.

那么代码中发生的事情按此顺序发生:

  1. 变量speed,, moveBoxtimer都被声明并给出初始值undefined.

  2. 一步一步的代码执行开始

  3. speed 被赋值 10

  4. moveBox =评估右侧的函数表达式,并将结果函数引用赋值给moveBox.

  5. 传入的函数表达式被setInterval计算,然后setInterval用它和值调用speed.

  6. 返回值setInterval分配给timer

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