我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

无论是箭头函数,还是说闭包,都能和匿名函数扯上关系。本文主要聚焦于匿名函数的概念,顾名思义,匿名函数就是没有名字的函数,代码上来说,就是没有.name属性。苏南大叔觉得匿名函数最大的好处,就是:一些不需要函数名字的地方,就显得代码更整洁。

苏南大叔:JavaScript,什么是匿名函数?没有name的函数 - 没有name的函数
JavaScript,什么是匿名函数?没有name的函数(图5-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。本文测试环境:nodejs@20.18.0chrome@132.0.6834.84

匿名函数

匿名函数在代码编程里面,非常常见。只要函数没有名字,就归属于匿名函数。箭头函数也属于匿名函数。

function(){}
()=>{}

匿名函数被赋值给变量后,就不是匿名函数了,因为它有名字。

console.log("匿名函数name检测", function () {}.name);
console.log("箭头函数name检测", (() => {}).name);
let ss = function () {};
console.log("命名函数name检测", ss.name);
let nn = function () {};
console.log("命名箭头name检测", nn.name);

苏南大叔:JavaScript,什么是匿名函数?没有name的函数 - 匿名函数检测
JavaScript,什么是匿名函数?没有name的函数(图5-2)

匿名函数与this

(function () {
  console.log(this);
})();
(() => {
  console.log(this);
})();

在浏览器环境下执行,这两个this都是window对象。

苏南大叔:JavaScript,什么是匿名函数?没有name的函数 - this检测2
JavaScript,什么是匿名函数?没有name的函数(图5-3)

(function () {
  console.log(this);
}).call({author:"sunan"});  // {author:"sunan"}
(() => {
  console.log(this);
}).call({author:"sunan"}); // 全局 windows 对象

普通匿名函数,支持.bind/.call/.apply的动态绑定this。而匿名函数不支持动态绑定,它定义的时候,父层的this是谁,箭头函数内的this就是谁。

匿名函数与arguments

箭头函数里面的arguments,是有问题的。

  • 可能显示arguments未定义。
  • 也可能显示的是上一层父级别的arguments,作用域下被箭头函数访问到。
(function () {
  console.log(arguments); // 普通匿名函数,正常得到参数列表
})("su","nan");
(() => {
  console.log(arguments); // 箭头函数报错arguments未定义
})("su","nan");

苏南大叔:JavaScript,什么是匿名函数?没有name的函数 - arguments检测一
JavaScript,什么是匿名函数?没有name的函数(图5-4)

function f1(){
  (function () {
    console.log(arguments); // 普通匿名函数,正常得到参数列表
  })("su","nan");
}
f1("苏","南");

function f2(){
  (() => {
    console.log(arguments); // 箭头函数arguments继承父层
  })("su","nan");
}
f2("苏","南");

苏南大叔:JavaScript,什么是匿名函数?没有name的函数 - arguments检测二
JavaScript,什么是匿名函数?没有name的函数(图5-5)

相关文章:

结论

虽然箭头函数也没有.name属性,但是在thisarguments这两个关键问题上,显然和普通的匿名函数表现不一致。如有异议,欢迎留言。

所以,可能的真相是:匿名与不匿名,箭头与非箭头。这是两个毫不相关两个维度层面上的分类。

更多苏南大叔的相关文章,请点击:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   js