为什么 TS 抱怨函数体内的函数声明

2024-02-04

我从 TS 收到此错误:

发生错误的原因非常清楚:

function outer(){

   if (true) {
        function inner(){    // nested function declaration

       }
   }   
}

但我的问题是 - 为什么 TS 会抱怨这一点 - 在转译为 ES5 时是否有一些技术原因我应该避免嵌套函数声明?

函数表达式是更好的选择吗?为什么?


函数表达式是更好的选择吗

是的。以下是要走的路:

function outer() {
  if (true) {
    const inner = function() { // OK
    }
  }
}

Why?

  • ES 模块默认处于严格模式。
  • 严格模式不允许在块中声明函数

被禁止的原因包含在原始 JavaScript 规范 http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf。简洁版本:实现之间的行为不一致.

注意 已知几种广泛使用的 ECMAScript 实现支持使用 FunctionDeclaration 作为语句。然而,应用于此类 FunctionDeclarations 的语义实现之间存在显着且不可调和的差异。由于这些不可调和的差异,使用 FunctionDeclaration 作为语句会导致代码在实现之间无法可靠地移植。建议 ECMAScript 实现禁止使用 FunctionDeclaration,或者在遇到这种用法时发出警告。 ECMAScript 的未来版本可能会定义替代的可移植方法,用于在语句上下文中声明函数。

因此,当严格模式出现(ES5)时,它就被禁止了。

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

为什么 TS 抱怨函数体内的函数声明 的相关文章

  • Javascript 当我们在 Chrome 中选择“停留在页面上”时如何调用函数

    请在 Chrome 浏览器中检查我的代码 如果您点击刷新 系统会提示您 2 个选项 离开此页面并 保持此页上 当我点击2 停留在此页面按钮它必须激活我的自定义功能显示消息 任何人都可以为我提供解决方案吗
  • 使用 fadeIn() 时,jQuery“未捕获类型错误:未定义不是函数”;

    我是 JS 新手 正在编写一个基本的富含 jQuery 的网页 其中同一文档中的每个页面都具有淡入 淡出功能 使用具有单独 ID 的相同 div 元素 无论如何 当我尝试淡入当前页面时 我收到错误 未捕获的类型错误 未定义不是函数 我在网上
  • 粘性页脚不粘在 AngularJS 中

    Im working an angular site and im trying to implement a sticky footer across all views but the footer stops sticking whe
  • 尽管我正在更改状态,但 React ui 没有更新

    import React useState from react const App gt const anecdotes If it hurts do it more often Adding manpower to a late sof
  • 仅当 url 以 www 为前缀时才会发生 CORS 错误

    我目前遇到一个关于 CORS 跨源资源共享 的问题 奇怪的是 只有当我使用 www url 前缀时 才会出现这种情况 例如 当我使用以下网址访问我的网站时 http example com index http example com in
  • 单击元素外部时触发事件的指令

    我知道有很多问题都在问类似的事情 但没有人真正解决我的问题 我正在尝试构建一个指令 当鼠标单击当前元素外部时 该指令将执行表达式 为什么我需要这个功能 我正在构建一个应用程序 在这个应用程序中 有 3 个下拉菜单 5 个下拉列表 如选择的
  • 添加数组的总和。显示1个输出

    更新 这个问题的答案如下 感谢在不同线程上进行的 dougtesting 将数组相加 显示总和 https stackoverflow com questions 45724641 add array together display su
  • 如何在 vuejs 中防止/停止点击传播

    我有一个递归列表 树 每个元素都有一个 click sayHello el id 现在的问题是 因为它是一个嵌套列表 例如 list element 0 01 list el 1 01 list el 2 01 list el 1 02 l
  • 如何为 Apollo 的 React HOC 定义 props 接口?

    我正在尝试使用 Apollo 的 React HOC 来获取数据并将其传递给我的组件 但出现以下错误 Argument of type typeof BrandList is not assignable to parameter of t
  • 使用 AngularJS $resource 进行 jsonp 请求

    我在 AngularJS 中定义了以下 2 个服务 两者都应该返回 JSONP 因为我正在进行跨域请求 服务A angular module ServiceA ngResource factory A function resource r
  • 当 eslint 从子文件夹运行时无法解析相对模块路径

    当我从存储库的根文件夹运行 eslint 时 一切运行正常 没有错误 但是当我从子文件夹运行时 我会得到大量导入 未解决的问题 而当我从根目录运行时则不会发生这种情况 reporoot subfolder0 subfolder1 MyFil
  • PHP:在执行 php 脚本时显示“正在加载”页面

    这就是我现在所拥有的 我有一个网页 当访问该网页时 它会通过开放 API 连接到 Surveygizmo com 检索大量数据 然后将这些数据返回给我进行处理 此过程大约需要 10 12 秒 在执行时 页面只是处于 正在加载 状态 并且我会
  • 输入号码时自动格式化 SSN

    我有一个文本字段 用户输入 SSN 号码 输入自身时 它应该格式化 就像关于文本字段的更改 它应该格式化999 999 999以这种方式在显示器本身上 kottenator 的脚本几乎已经完成 但它每隔 3 位数字就中断该值 而不是 3 位
  • bootstrap-datetimepicker 仅显示日期

    我正在用这个repo https github com smalot bootstrap datetimepicker由 smalot 提供 我只想选择并显示日期 对于其他一些地方 我显示数据和时间 因此选择此存储库 我可以设法仅使用它来选
  • 如何实现 chromecast 对 html5 播放器的支持

    我使用js和html5设计了一个具有一些自定义功能的html5播放器 现在我需要在html5播放器上添加chromecast选项 例如https raw githubusercontent com kim company videojs c
  • 在 gulp 和 browsersync 问题中观看新文件

    我使用 browsersync 在文件更改时重新加载浏览器 而且它工作完美 但是当我创建新文件 例如 html scss js 时 bowsersync 不起作用 如何解决这个问题 gulpjs Browser Sync gulp task
  • 显示对象内容 - JS/jQuery

    With this data events 返回 object Object 我需要看看里面到底发生了什么 我找到了这个 var Finder each this data events function i n Finder Name i
  • 如何使用 jquery 生成并附加随机字符串

    一般性 我想使用 jQuery 或 javascript 将随机字符串附加到元素的属性 规格 我需要引用 CDN 上的 CSS 文件 不幸的是 每次更新该 CSS 文件时 CDN 都会更改该文件的 URL 所以我不能简单地引用静态 URL
  • 在 Angular 中导入和使用 lodash 的正确方法

    我曾经能够通过如下所示的 import 语句在 Angular 中使用 lodash 方法 import debounce as debounce from lodash 我现在在使用该语句时收到以下错误 node modules type
  • 获取css规则、chrome扩展

    我正在开发 Chrome 扩展程序 它需要访问document styleSheets cssRules 它在某些网站上运行良好 例如w3school 但其他人则不然 比如堆栈溢出 我收到错误 Failed to read the cssR

随机推荐

  • hibernate集合-无效的列索引

    我在 hibernate 和 JPA 中创建了一个父类和子类 当我尝试保留该类时 我收到一个 SQL 异常 指出 列索引无效 这是父类 Entity Table name vnd base file format public class
  • Three.js:创建直三棱柱

    我正在尝试创建一个直角三棱柱 到目前为止 这是我的代码 var triangleGeometry new THREE Geometry triangleGeometry vertices push new THREE Vector3 1 0
  • React JS - onChange 触发两次

    当我使用react image uploader上传图像时 onchange会触发两次 所以它尝试将图像上传到后端两次 这是我的处理方式 user uploads image to app
  • Kotlin Mockk 错误:verify { ... } 块内缺少调用

    我已经读到了一些与此错误消息或类似错误消息有关的问题 每个 也会出现此问题 但没有一个问题能让我获得成功结果 关于如何让它发挥作用有什么提示或建议吗 这是我的设置和单元测试本身 compileSdkVersion 29 defaultCon
  • 如何知道 GWT ScrollPanel 中正在显示哪个元素

    关于 GWT ScrollPanel 的问题 有没有办法确定 ScrollPanel 中正在显示哪个子元素 当然 ScrollPanel包含具有HTML对象的DecoratorPanel 下面是执行该作业的 GWT 方法 它是从上面建议的
  • 如何将 RUNAS /NETONLY 功能构建到 (C#/.NET/WinForms) 程序中?

    我们的工作站不是 SQL Server 所在域的成员 它们实际上根本不在域中 不要问 当我们使用 SSMS 或任何其他方式连接到 SQL Server 时 我们将 RUNAS NETONLY 与 DOMAIN user 一起使用 然后我们输
  • 如何检查我的计算机上是否打开了另一个应用程序窗口(即遍历所有打开的窗口)?

    我有一个应用程序 可以将一系列文本文件写入用户计算机上的文件夹中 然后 它会提示他们是否要打开该文件夹以查看所有文件 我使用 System Diagnostics Process Start 来执行此操作并且效果很好 但是 如果已经有一个打
  • 如何在 anaconda 中升级 scikit-learn 包

    我正在尝试将 scikit learn 包从 0 16 升级到 0 17 为此 我尝试使用此网站上的二进制文件 http www lfd uci edu gohlke pythonlibs scikit learn http www lfd
  • 如何通过AWS lambda在python中创建密码加密的zip文件

    我正在尝试通过在 python 3 9 上运行的 lambda 创建受密码保护的 zip 文件 我尝试过使用 pyminizip 和 pyzipper 但两个库都遇到错误 对于 pyminizip 我不断遇到Unable to import
  • 没有 JIT 的 Android 设备

    我正在关注性能技巧 http developer android com training articles perf tips html通过开发者网站 其中提到了没有 JIT 的 Android 设备 但我搜索了无 jit 设备 但找不到
  • POST 方法、Ajax 和安全性?

    我使用 Ajax jQuery 和 POST 方法来更新数据库中的数据 我执行以下操作 从表单获取数据 user id entry id content 将它们发送到将处理数据的 URL 如果数据有效 我们会将其记录在我们的数据库中 我不知
  • 如何在android汉堡菜单图标上实现徽章计数器[重复]

    这个问题在这里已经有答案了 我正在尝试在汉堡菜单图标 即不是其他菜单图标 上实现计数器徽章 类似于 eBay 应用程序 如在 有人研究过这个吗 试图找出尽可能最干净的方法 做起来很简单Toolbar Widget您可以按照下面的示例来实现
  • 使用 PHP 清理 URL [重复]

    这个问题在这里已经有答案了 所以我试图在 PHP 中构建一个干净的 url 系统来更改这样的 URLhttp example com index php projects 05 to http example com projects 05
  • VS/NuGet 如何决定创建 csproj 引用以及差异意味着什么?

    当我安装 NuGet 包时 它通常会使用新引用更新我的 proj 文件 如下所示
  • 在无限一维图中寻找洞的算法

    一头牛站在无边无际的栅栏前 另一边是草地 牛想要到达这片草地 沿着栅栏的某个地方有一个洞 牛可以通过这个洞到达另一边 从牛到洞的距离 d 具有与之相关的概率分布 f d 即洞距牛 k 步的概率由 f k 给出 请注意 我们认为所有距离都是离
  • 如何将我的 Facebook 页面中的最新帖子显示到我的网站

    我在 Facebook 上有一个页面 我想在我的网站页面上显示我的提要 墙上的最新 5 个帖子 这个怎么做 我找到了这个解决方案 很简单 https developers facebook com docs reference plugin
  • OS X El Capitan 中的“受限”文件夹/文件

    从 OS X Yosemite 升级到 OS X El Capitan Developer Preview 后 我尝试编辑 系统 库 LaunchDaemons ssh plist将默认 SSH 端口更改为自定义端口 这是我几年来一直使用的
  • 有没有办法从 XS 访问 perl 中的特殊令牌?

    在 Perl 中 特殊标记如 PACKAGE SUB FILE LINE 存在并可从脚本中获取 我可能会得到的价值 PACKAGE from XS as HvNAME PL currstash 我想 但如何访问别人呢 是否有特殊的接口可以访
  • 使用 Entity + LINQ 为何不只是对我的查询进行硬编码?

    所以我现在已经使用 Entity LINQ 进行开发一段时间了 我真的开始想知道最佳实践 我习惯了 如果我需要获取数据 则引用存储过程 的模型 如果需要 可以动态更改存储过程 并且不需要重新编译代码 我发现我的代码中的查询如下所示 List
  • 为什么 TS 抱怨函数体内的函数声明

    我从 TS 收到此错误 发生错误的原因非常清楚 function outer if true function inner nested function declaration 但我的问题是 为什么 TS 会抱怨这一点 在转译为 ES5