Javascript 什么';如果可以';我真的不能用你给他们起的名字来指代他们吗?
如果你不能用你给的名字来引用函数表达式,那么命名函数表达式又有什么意义呢Javascript 什么';如果可以';我真的不能用你给他们起的名字来指代他们吗?,javascript,Javascript,如果你不能用你给的名字来引用函数表达式,那么命名函数表达式又有什么意义呢 var f = function g() { console.log("test"); }; g(); // ReferenceError: g is not defined 我发现特别有用的一个优点是,它在调试时很有帮助 发生错误时,您会在控制台的stacktrace中看到函数名。否则stacktrace中的行将只引用匿名函数 你也可以给函数起一个名字,让它的用途更清楚。哦,但是你可以用这个名字来引用它们。这
var f = function g() {
console.log("test");
};
g(); // ReferenceError: g is not defined
我发现特别有用的一个优点是,它在调试时很有帮助 发生错误时,您会在控制台的stacktrace中看到函数名。否则stacktrace中的行将只引用匿名函数 你也可以给函数起一个名字,让它的用途更清楚。哦,但是你可以用这个名字来引用它们。这些名称只存在于函数的范围内
var f=函数g(){
//在这里,您可以使用'g'(或'f')引用函数
返回类型g;
};
控制台日志(g型);
//它在这里只作为'f'存在
console.log(f())代码>如果创建一个传递的递归函数,这一点很重要。当你命名一个函数时,它就会在自己的范围内了解自己
这里我创建了一种工厂函数,它创建递归函数。为了使递归函数正常工作,它们需要了解自己
您可以想象这在更广泛的意义上应用,就像返回一个递归函数作为模块导出一样
var
func=(函数(){
返回函数rec(a){
控制台日志(a);
返回a>=5“完成”:rec(a+1);
};
}),
invoke=函数(f,args){
返回f.apply(null,args);
};
console.log(
调用(func(),[1])
);代码>根据定义,您定义的不是匿名函数:
function [name]([param[, param[, ... param]]]) {
statements
}
姓名:
函数名。可以省略,在这种情况下,函数
成为一个匿名函数
另外,很多人都会考虑
var f = function() {
return 'test';
};
不是匿名函数,因为您现在可以通过var namef()
调用它,并且现在可以通过name函数将函数作为参数传递给其他函数,该函数采用scallback(f)
在我看来,真正的匿名函数没有任何名称,例如传递给回调的某个名称:
$('#id').on('click', function(){
console.log("I am anonymous");
});
或作为一项功能立即运行:
(function(when){
console.log("run me :", when);
})("right now");
按照您现在使用的语法,在ES6(大多数非IE浏览器实现此功能)中,f.name
是g
。这在调试时非常有用,您可以使用它来重现:
var f = function g (n, m) {
if (n>0) {
return g(n - 1, m = m + 'meta');
}
return m + 'test';
};
console.log(f(10, 'super'));
这个函数不是像f()
那样可以调用吗?我知道我在这里有点挑剔,但如果它被命名,它就不是匿名函数。它们是相反的。在我的帖子中,我从来没有说过函数可以同时是匿名函数和命名函数。@trex005如果你想提供帮助和挑剔,你可以说给出的示例名为a:p你能详细说明一下吗,这样就不会更像是一个注释了?完成了。然而,我认为在这方面没有更多的细节需要阐述。无论如何,我认为这应该是答案的一部分。在这个特定的例子中,当函数分配给一个变量时,如果省略g
,函数名将被推断为f
。但是我知道它在其他情况下会很有用。你是对的,我没有真正注意这个例子。请注意,其中一个原因是使用f
引用这里的函数是危险的-例如,可以在函数表达式之后将f
重新定义为null
,然后尝试调用f()
在函数中会抛出。