为什么setTimeout会立即触发?

时间:2016-10-12 08:28:58

标签: javascript

我在W3学校找到了this v.b v.c v.y v.z 方法示例,并发现了一些我无法解释的内容。例子是:

setTimeout()

......工作正常。但是当我把它改成

myVar = setTimeout(alertFunc, 3000);

......警报立即触发。为什么?不应该是一样的吗?

3 个答案:

答案 0 :(得分:6)

  

不应该一样吗?

不,完全没有。

self.get_object().var2 setTimeout(alertFunc, 3000)(对函数的引用)的值传递给alertFuncsetTimeout存储该函数引用,以便在三秒后调用它。

立即

setTimeout 调用 setTimeout(alertFunc(), 3000),并将其返回值传递给alertFunc。完全按setTimeout 调用 foo(bar())的方式将其返回值传递给bar

答案 1 :(得分:2)

@using (Html.BeginForm()) { @Html.AntiForgeryToken() @Html.DropDownListFor(model => model.td_company_name, ViewBag.Listcompany as IEnumerable, new { @class = "form-control" }) } 接受函数作为第一个参数,时间作为第二个参数。我希望你也听说过返回函数的函数。因此,对于这种情况,您也可以在那里调用函数。

当您将setTimeout()添加到任何功能时,它会立即调用它。因此,您调用该函数并返回任何内容以执行()

案例1

setTimeout

这里传递功能本身以在3秒后执行。

案例2

setTimeout(myFunc, 3000);

这里传递函数执行的返回值以在3秒后执行。

答案 2 :(得分:1)

myVar = setTimeout(alertFunc(), 3000);与以下相同:
aF = alertFunc(); myVar = setTimeout(aF, 3000);

通过此,您可以看到在alertFunc之外调用setTimeout