我一直认为匿名函数没有name
,但分配的情况并非如此:
const foo = () => {};
console.log(foo.name); // expected "" but got "foo"

这让我想知道变量名是否也是匿名函数的本地名称:
const fact = n => n > 0 ? n * fact(n - 1) : 1;
// ^
// |
// Is fact a local variable?
如果它不是本地的,那么对于像fact
这样的递归函数,我们需要沿着范围链向上移动。显然,这不是一个主要的性能问题。不过,我很想知道函数变量名是否在匿名函数中是本地的。
答案 0 :(得分:3)
我很想知道函数变量名是否在匿名函数中是本地的。
没有。这只是命名函数表达式的情况(即使在那里也是not exactly a local variable)。
我们需要走近范围链。显然,这不是一个主要的性能问题。
根本不是的性能差异。范围链是静态的,对于变量范围内的性能而言,它并不重要。
我一直认为匿名函数没有名称,但在分配时并非如此。
是,it's a new ES6 feature直接分配给变量的匿名函数表达式将设置其.name
属性。但是,这与他们的范围无关。
答案 1 :(得分:0)
似乎它确实不是一个局部变量:
var fact = n => n > 0 ? n * fact(n - 1) : 1;
var foo = fact;
fact = x => x;
console.log(foo(5));

由于答案是20而不是120,我们知道它正在遍历范围链。