将命名函数存储在具有不同名称的变量中

2024-07-04

考虑这段代码:

var x = function z(){
    console.log("called x");
}

x(); // will print out "called x"
z(); // ReferenceError!

因此,可以在变量中存储命名函数,但我们仍然只能通过变量名来调用该函数。

这种行为有什么原因吗?为什么我们可以将命名函数存储在变量中?还有其他场景可能有用吗?


当您使用这样的命名函数表达式(NFE)时,函数的名称仅在范围内within功能:

var x = function z(){
    console.log(typeof z); // "function"
};
x();
console.log(typeof z);     // "undefined"

这是命名函数表达式和函数声明之间的重大区别之一:NFE 不会将函数的名称添加到表达式出现的范围中;NFE 不会将函数的名称添加到表达式出现的范围中。一份声明does将函数的名称添加到声明出现的范围中。 (它们也发生在不同的时间等;我总结了创建函数的各种方法以及它们如何工作在另一个答案中 https://stackoverflow.com/a/22173438/157247.)

这样做有几个原因:

  • 对于递归有用的情况,它允许函数调用自身(通过其名称)而不依赖变量。

  • 在 ES5 及更早版本中,它为您提供了一种为函数命名的方法(用于堆栈跟踪等)。 (在 ES2015+ 中,即使大多数情况下使用匿名表达式,函数也会有一个名称;名称是根据表达式设置的。)

  • 在 ES2015+ 中,它允许您为函数指定一个与从表达式推断的名称不同的名称。

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

将命名函数存储在具有不同名称的变量中 的相关文章

随机推荐

  • iPhone 上的图像处理

    我想对 iPhone 拍摄的照片进行图像处理 该处理将涉及二维矩阵卷积等 我担心嵌套的性能NSArrays会很糟糕 操作基于像素的图像的正确方法是什么 我应该简单地使用分配的 C 数组吗malloc 你有没有看过石英二维 http deve
  • 从数组中获取特定长度的所有可能的字符串组合的算法

    从给定数组中获取具有最小和最大长度值的所有可能的字符串组合的最佳算法是什么 注意 这会增加复杂性 因为与这些链接到的问题不同 该值是可变的 例如 letters array a b c 1 2 3 min length 1 max leng
  • 导航栏标题视图对齐

    我希望我的导航栏在中间显示两件事 其中之一是列表名称 另一个是用户名称 用户名将放置在列表名称下 到目前为止我所做的是 我以编程方式创建了两个标签和一个超级视图 并设置titleView of navigationItem override
  • 如何检查Python中的列表列表中是否存在某个元素?

    我有一个与文件中的行相对应的列表列表 具有多列 col1 col2 col3 elem1 elem2 elem3 elem4 elem5 elem6 我想检查是否 例如 elem3位于任意列表中 如果在 则进入该列表 实际上我有一个需要检查
  • 超过 1 列具有 string_agg 的唯一值

    我正在尝试分组并获取多列的值列表 这是一个例子 City State Income Salem OH 40000 Salem OH 45000 Mason OH 50000 Dayton OH 60000 Salem MA 40000 Ma
  • VueJS:缓存http响应数据的最佳方法

    我正在寻找一个在 VueJS 中缓存 http 响应数据的最佳方法 现在我使用 Vuex Store 来我的博客 我想在请求到服务器时缓存所有响应数据 具体来说 这是我的博客 当我通过路由器请求数据到博客详细信息时1 3 4 我有响应数据
  • PowerShell - 从 .csproj 文件获取版本

    我正在学习 PowerShell 现在 我正在努力获得Version csproj 文件中的元素值 csproj 文件的 XML 如下所示
  • 讨论小 n 的计算复杂性的正确方法

    当讨论计算复杂度时 似乎每个人都会直接谈到 Big O 举例来说 我有一个混合算法 例如合并排序 它对较小的子数组使用插入排序 我相信这称为平铺合并排序 最终仍然是合并排序O n log n 但我想讨论小型算法的行为 特征n 在实际没有发生
  • 在 C# 中使用匿名类型创建对象文字时出现问题

    我正在尝试构建 JavaScript 对象文字的 C 近似值 以传递给 asp net MVC 中的视图模型 var obj new dynamic new name Id index Id width 40 align left new
  • 在控制器的 RequestMapping 中启用 ConditionalOnProperty

    我有一段代码 PropertySource value classpath securityConfig properties ignoreResourceNotFound true Controller public class Inde
  • 关于注释代码,您的“硬性规则”是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我看过其他问题但我仍然对这个主题的涵盖方式不满意 我想提取一份精简的列表 以便在代码检查时检查注释 我确信人们会说出一些只会互相抵消的话 但是
  • 检测用于构建 OSX 框架的 SDK 版本

    我需要检测哪个 SDK 版本用于构建 OSX 框架 任何有用的提示将不胜感激 弗洛里安 感谢您的提示解决了我的问题 我需要验证框架是否确实是使用 10 6 SDK 构建的 谢谢你的提示 我用otool解决了这个问题 如果链接到 10 6 S
  • 从 Tableau Public 仪表板中抓取数据

    我对从网站上抓取数据还很陌生 并且不知道如何从使用 Tableau Public 的网站上抓取数据 网站 https showmestrong mo gov data public health https showmestrong mo
  • 如何使用 pyav 或 opencv 解码原始 H.264 数据的实时流?

    数据是通过套接字接收的 没有更多的外壳 它们是纯IP B帧 以NAL标头 类似于00 00 00 01 开头 我现在使用 pyav 来解码帧 但我只能在收到第二个 pps 信息 在关键帧中 后解码数据 因此我发送到解码线程的数据块可以以 p
  • 显示工具提示时 d3.event 的 x 和 y 坐标不正确

    我正在尝试在水平条形图上显示工具提示 如果我稍微向下滚动页面 此工具提示将无法正常工作 如果条形图在视图中且无需滚动 则此方法效果很好 但是 如果我在图表上方添加更多元素 当我向下滚动时 工具提示会从鼠标指针处移至更高位置 请帮助我解决这个
  • SharePoint REST 查询 SP.UserProfiles.PeopleManager 特殊字符

    这个问题是我作为起点发现的这个问题的延伸 无需特殊字符即可工作 SharePoint REST 查询 SP UserProfiles PeopleManager https stackoverflow com questions 23340
  • asp.net mvc web api 使用 OData 补丁进行部分更新

    我正在使用 HttpPatch 部分更新对象 为了实现这一点 我使用 OData 中的 Delta 和 Patch 方法 此处提到 目前推荐使用 Web API 执行部分更新的方法是什么 https stackoverflow com qu
  • 将符号限制为 Linux 可执行文件的本地范围

    任何人都可以建议我们限制将符号导出到全局符号表的某种方法吗 提前致谢 Hi 感谢回复 实际上 我有一个可执行文件 它静态链接到第三方库 例如 ver1 a 并且还使用第三方 so 文件 该文件再次与相同的库链接 但不同版本 例如 ver2
  • 从Python3中的base64编码字符串中删除新行“\n”?

    我正在尝试在 Python3 中建立 HTTPS 连接 当我尝试对我的用户名和密码进行编码时base64 encodebytes方法返回编码值 并在末尾带有一个新行字符 n 因此当我尝试连接时出现错误 有没有办法告诉base64库在编码时不
  • 将命名函数存储在具有不同名称的变量中

    考虑这段代码 var x function z console log called x x will print out called x z ReferenceError 因此 可以在变量中存储命名函数 但我们仍然只能通过变量名来调用该