为什么我不能将函数调用(而不是函数引用或匿名函数)传递给 setTimeout()?

2024-01-05

请忽略这个代码没有实现任何目标的事实,并对可能是一个愚蠢的问题表示歉意!

我知道我无法将函数调用传递给setTimeout()作为第一个参数,但是why我可以不这样做吗?

let names = ['Andy', 'Ross', 'David'];

function printer (name) {
 console.log(name);
}

names.forEach(name => setTimeout(printer(name), 1000);

Result:

Andy
timers.js:327
    throw new TypeError('"callback" argument must be a function');
    ^

我可以通过使用对的引用来解决问题printer并使用bind()发送name随之而来,但为什么我必须采取这些额外的步骤呢?

let names = ['Andy', 'Ross', 'David'];

function printer (name) {
  console.log(name);
}

names.forEach(name => setTimeout(printer.bind(null, name), 1000));

Result:

Andy
Ross
David

这是因为执行顺序的原因。如果你将一个函数调用传递给setTimeout,该函数将立即执行,即该函数立即放入JavaScript的执行堆栈中。

如果您传递函数名称,即对函数的引用,则只有在计时器完成后,该函数才会放入 javascript 线程的执行堆栈中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我不能将函数调用(而不是函数引用或匿名函数)传递给 setTimeout()? 的相关文章

随机推荐

  • 在 iOS 上使用多个崩溃报告器

    我们成功使用试飞直播 https testflightapp com sdk live 作为我们的崩溃记者 但我认为缺少一些功能 这些缺失的功能在另一个崩溃报告器中 崩溃解决方案 http www crashlytics com 但到目前为
  • 具有代码覆盖率的 UIAutomation

    我目前正在 jenkins 上自动化我们的 iOS 测试 到目前为止 我在运行单元测试 将 OCUnit 转换为 JUnit 以及以 Cobertura 格式生成代码覆盖率方面没有任何问题 大量谷歌搜索 但没有困难的问题 但是 在创建 UI
  • 使用vba将多个访问报告合并到一个pdf文件

    我不想使用 vba 代码将多个访问报告合并到一个 pdf 文件中 该 vba 代码需要在我工作的计算机上运行 这些计算机仅包含 Adob e Reader 并且我无法安装 Acrobat 因为我不是管理员 所以现在我的代码为所有报告生成一个
  • WordPress 数据库错误:[表 'databasename.wp_users' 不存在] SELECT * FROM wp_users WHERE user_login = '用户名'

    我正在使用 XAMPP 在 Mac OSx Sierra 上本地开发 WordPress 主题 它被设置为当我输入时localhost ThemeName输入 URL 我被带到我的网站 安装一些更新后我重新启动了计算机 现在当我转到loca
  • 使用 Firebug 检测网页上的错误

    检查我们的 Web 应用程序是否存在 重复属性 等错误的最佳方法是什么 我的开发团队倾向于使用 Firefox 和 Firebug 进行 Web 开发 我们注意到代码库中出现了一些错误 通常是重复的属性 例如 div class inter
  • jinja2 链接到静态文件

    我试图了解如何在 jinja2 中创建静态文件的链接 我查找的所有内容都与 Flask 相关 而我在这个阶段只使用 webapp2 我的 main py 文件如下所示 import os import urllib from google
  • SVN 提交后挂钩将消息发送回客户端

    我正在 bash 中编写一个提交后脚本 并且我想将消息传递回进行提交的客户端 然而 echo my message gt 2 没有将其返回给客户 是否可以使用提交后挂钩发送回消息 仅当 Hook 失败时才会显示 STDERR 正如您现在可能
  • 应用内购买/快速转换

    我正在尝试将教程 应用程序内购买 转换为 Swift http www tutorialspoint com ios ios in app purchase htm http www tutorialspoint com ios ios i
  • 建议在实体框架 4 中使用临时表或表变量。更新性能实体框架

    我需要更新表中的一个位字段 并针对该表中的特定 Id 列表将该字段设置为 true Id 从外部进程传入 我想在纯 SQL 中 最有效的方法是创建一个临时表并用 Id 填充它 然后用它连接主表并相应地设置位字段 我可以创建一个 SPROC
  • AttributeError:模块“tensorflow.python.keras.api._v2.keras.backend”没有属性“set_image_dim_ordering”

    最近尝试使用python运行github上的一段代码 代码位于 https github com costapt vess2ret https github com costapt vess2ret我使用了以下软件 TensorFlow g
  • 在Python中按索引填充列表/数组?

    这可能吗 myList myList 12 a myList 22 b myList 32 c myList 42 d 当我尝试时 我得到 IndexError list assignment index out of range 您必须预
  • 来自 acf 字段值的传单标记

    我喜欢 Leaflet 因为它比 Google 地图更容易包含和更改外观 我在我的 WordPress 网站上使用 ACF 插件 其中有几篇带有位置的帖子 现在我所做的是使用 div 属性将数据从 php 传递到 JS 如下所示 div c
  • 在 AngularJS 中使用相对路径进行服务调用

    我有以下代码 在部署到测试服务器之前它工作正常 scope getUserList function userName http method get url GetUserList params userName userName suc
  • 如何在角度中使用 useFactory 根据某些条件延迟加载模块?

    我有一个包含大量模块和组件的角度项目 其中我想根据某些业务逻辑显示模块的组件 我想使用 Angular 的强大功能 即延迟加载 这将使我的应用程序变得精简 我想做的事 假设我有一个书店网站 很多读者都花时间阅读在线文章 我想根据以下内容显示
  • 如何使用 xib 文件为自定义 UIView 类编写 init 方法

    我使用界面生成器创建了简单的视图 该视图有一个标签 你知道如何为这个类创建 init 方法吗 我写了自己的版本 但我不确定它是否正确 interface AHeaderView property nonatomic weak IBOutle
  • 如何更改分片键

    我知道不可能更改片键 但是 当我设置了不正确的分片键时 如何更改它 转储您分片的集合 再次导入它 设置新的分片键
  • 使用实体框架添加和更新实体

    在我的上一个项目中 我使用了 Entity Framework 5 Code First 我完成了我的项目 但在开发过程中遇到了很多痛苦 我试图在下面解释我的痛苦 我的数据访问逻辑层中有几个数据类 例如 Product ProductCat
  • 执行内存中的exe

    我正在尝试这段代码 从内存中执行EXE http www coderprofile com networks source codes 138 execute resource directly in memory 我遇到错误 实际和形式
  • WPF-将列表绑定到列表视图

    我正在创建一个 wpf 应用程序并从我的 USB 网络摄像头捕获图像 我尝试过的是将所有捕获的图像存储在List并在一个Listview public List
  • 为什么我不能将函数调用(而不是函数引用或匿名函数)传递给 setTimeout()?

    请忽略这个代码没有实现任何目标的事实 并对可能是一个愚蠢的问题表示歉意 我知道我无法将函数调用传递给setTimeout 作为第一个参数 但是why我可以不这样做吗 let names Andy Ross David function pr