JavaScript 中匿名函数有什么用
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,这篇文章将为大家详细讲解有关JavaScript 中匿名函数有什么用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。本文源自知乎的一个提问:同样都是在运
千家信息网最后更新 2025年02月03日JavaScript 中匿名函数有什么用本文源自知乎的一个提问:
这个看似简单的问题,我在浏览器里捣鼓了一个多小时。而且好像发现了 FireFox/Chrome Devtools 的 2 个疑似 bug。 在 ES 规范中,有一个内部函数 当我们谈到匿名函数时,其实有 2 种不同的含义: 由于函数的 在大部分调试工具中,没有名字的函数会显示为 我们把题目中的代码改写一下: 不论是
可以清楚的看到,这个函数是匿名函数。(忽略最下面的匿名函数,那个是 在 FireFox 的的调用栈都是:
这就太迷了。不论如何调用 如果使用 在对于这个的处理上,Firefox 略胜一筹吧: FireFox 截图:
我们再看一下 Chrome Devtools:
有点迷惑,可能是把引擎内部的调用栈 dump 出来了吧。我觉得这个也可以被认为是一个 bug 了。 题主的疑惑是,为什么 简单解释就是, 当赋值时,会先判断右值是否为匿名函数。如果是的话,重新设置函数名。 我们再来看看另一个语句: 只有匿名函数(静态语义)执行赋值操作时,才会为变量( rval )重新设置 name 属性,即函数名。这里的a() 只是一个函数调用,并不是函数定义, 所以不会重新设置函数名。 类似的:
这篇文章将为大家详细讲解有关JavaScript 中匿名函数有什么用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
同样都是在运行时才能确定函数,为什么 b
是匿名函数?
IsAnonymousFunctionDefinition()
用来判断一个函数是否为匿名函数,但是这个函数只在规范中使用,通过 JS 代码并不能调用,很多 JS 引擎会在内部实现这个函数(非强制要求)。函数没有名字 函数的 name
属性是"anonymous"
name
是继承自 Function.prototype.name
,因此没有名字的函数的 name
属性是空字符 ""
。
,也就是我们经常说的匿名函数。var a = () => () => { throw new Error('foo') }
a()()
,还是 var b = a(); b()
,在 Chrome 中执行:Global Scope
)b
函数, a
都不应该出现在调用栈中,我觉得这应该可以算是 FireFox 的一个 bug 了。new Function
定义函数,错误栈里是没有尖括号的。因为根据规范,使用 Function
定义的函数是有名字的,名字就是 "anonymous"
。就好比一个人叫无名氏,并不是因为他没有名字,而是他姓无,叫名氏。var a = new Function('throw new Error("bar")')a()
var a = () => () => 1
的函数名是 a
,而 var b = a()
就是匿名函数。var a = () => 1
包含了 2 个阶段,箭头函数定义和赋值操作。所有的箭头函数都是匿名函数,在箭头函数的定义中,规范内部的 hasName
属性直接设置为了 false
。然后 IsAnonymousFunctionDefinition(expr)
判定此函数是匿名函数:If IsFunctionDefinition
ofexpr
isfalse
, returnfalse
.Let hasName
be HasName of expr.If hasName
istrue
, returnfalse
.Return true
.
var b = a()
。这个也包含了赋值操作,还有一个函数调用操作。var a = (1, () => 'foo')a = [() => 1][0]var a = eval('()=>1')
关于JavaScript 中匿名函数有什么用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
函数
名字
属性
就是
箭头
代码
内容
引擎
文章
更多
知识
篇文章
不同
不错
清楚
略胜一筹
也就是
变量
只是
只有
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
c3p0源码连数据库
mybatis多个数据库
广河县气象局网络安全
多台局域网服务器管理界面
数据库实验用户安全性实验
小型网络网络安全设置
数据库营销变味案例 保险推销
数据库表主键外键怎么设
河北邯郸dns服务器云主机
工控与软件开发
数据库如何检查大批量数据更新
mimic数据库教学
昆虫乐园软件开发
阿里云服务器能设置几个实例
热血传奇十三区服务器
部队网络安全排查整治情况
商丘市软件开发企业
想要一组数据库
wifi服务器如何重启
我的服务器ip地址1.16.5
上海国家网络安全宣传周主题
天津专业软件开发价格服务标准
互联网科技创新集团有限公司
因特网域名服务器分为哪三类
涉密文件服务器配置
网络安全公司第三季度营业额
魔兽tbc服务器没人
服务器交换机日志管理
数据库如何检查大批量数据更新
cdh所需服务器配置