通常,在Javascript中,当我想将匿名/内联函数作为参数传递给另一个函数时,请执行以下操作之一。
someFunctionCall(function() {
//...
});
someFunctionCall( () => {
//...
});
但是,我最近继承了一个使用 named 函数作为内联参数的代码库,例如
someFunctionCall(function foo() {
//...
});
我以前从未见过这种语法。该函数仍然似乎是匿名的-在调用范围或被调用范围中都没有定义foo
函数。这仅仅是样式问题,还是可以使用命名函数(上面的foo
)作为匿名函数来更改该程序的行为或状态?
这是专门针对NodeJS(不是基于浏览器的程序)程序的,我对使用函数作为参数的特定行为特别感兴趣。也就是说,欢迎您提供跨平台和运行时的行为信息。
答案 0 :(得分:8)
使用命名函数表达式而不是匿名函数表达式至少具有三个优点。
答案 1 :(得分:2)
使用那些“命名匿名函数”不会改变行为,但是会在堆栈跟踪中显示函数名,这非常有用。同样,该函数本身也可以被调用。
答案 2 :(得分:0)
我举个例子
案例1:
var obj = {count: 0, counter: ()=> {this.count+=1;}}
如果您执行console.log(obj.count),您将得到0
案例2:
var obj = {count: 0, counter (){this.count+=1;}}
在第二种情况下,如果您执行console.log(obj.count)值将为1。
希望您现在已经了解。 Lamda表达式无法使用此对象的引用访问值。它只能访问具有全局引用的变量。
在情况1中,如果要使其与lamba一起使用,则必须使用obj.count + = 1,并且名称具有引用。
其余的JavaScript函数实现保持不变,没有太大区别。