Javascript有一个有趣的东西叫做函数提升,这意味着我们可以在声明之前(即视觉上)使用函数表达式(注意:我的措辞可能不正确,请随意评论)。
fn1(); // works OK
function fn1() {console.log('fn1');}
但是,如果我们将命名函数作为参数传递,则不会发生函数提升。语法看起来非常相似,但我想这不再是函数表达式,而是命名的匿名函数(!)。
fn2(); // throws a ReferenceError as fn2 is not defined
setTimeout(function fn2() {console.log('fn2')}, 0);
- 函数表达式和命名的 lambda 之间确实有区别吗?
- 两者之间还有其他显着差异吗?
- 考虑到 fn2 是一个命名的 lambda,
fn2
除了 fn2 本身之外,是否可以从其他任何地方访问该名称?