JavaScript,什么是匿名函数?没有name的函数
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
无论是箭头函数,还是说闭包,都能和匿名函数扯上关系。本文主要聚焦于匿名函数的概念,顾名思义,匿名函数就是没有名字的函数,代码上来说,就是没有.name
属性。苏南大叔觉得匿名函数最大的好处,就是:一些不需要函数名字的地方,就显得代码更整洁。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验总结。本文测试环境:nodejs@20.18.0
,chrome@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);
匿名函数与this
(function () {
console.log(this);
})();
(() => {
console.log(this);
})();
在浏览器环境下执行,这两个this
都是window
对象。
(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");
function f1(){
(function () {
console.log(arguments); // 普通匿名函数,正常得到参数列表
})("su","nan");
}
f1("苏","南");
function f2(){
(() => {
console.log(arguments); // 箭头函数arguments继承父层
})("su","nan");
}
f2("苏","南");
相关文章:
结论
虽然箭头函数也没有.name
属性,但是在this
和arguments
这两个关键问题上,显然和普通的匿名函数表现不一致。如有异议,欢迎留言。
所以,可能的真相是:匿名与不匿名,箭头与非箭头。这是两个毫不相关两个维度层面上的分类。
更多苏南大叔的相关文章,请点击:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。